2
A
回答
5
通常我会通过使用环境变量来做到这一点。例如喜欢的东西:
#include <iostream>
#include <stdlib.h>
void init() __attribute__ ((constructor));
void init() {
std::cout << "Init: " << getenv("MYLIB") << std::endl;
}
让你做:
MYLIB=hi LD_PRELOAD=./test.so /bin/echo Init: hi
显然它并没有在构造函数(这是一个GCC extension)使用,但是这往往是一个方便的地方使用它们。
我过去所做的一直是使用它,并结合一个看起来像是“普通”应用程序的shell脚本包装器。在调用exec
来加载要插入的程序之前,shell脚本会将其参数压入您的库期望的环境变量中。它对用户来说“没有太脆弱或侵入性”是正确的。
如果您愿意,您也可以通过读取/proc/self/cmdline
来直接读取当前进程的命令行。就我个人而言,尽可能避免干扰您正在使用的流程。
相关问题
- 1. 将附加参数传递给d3.svg.line()
- 2. 将附加参数传递给j_security_check
- 3. 将加法参数传递给IControllerFactory.CreateController
- 4. 将JSP加密参数传递给servlet
- 5. 将附加参数传递给scrapy.Request()
- 6. 将参数传递给Action?
- 7. 将参数传递给colorbox
- 8. 将参数传递给hbm2ddl
- 9. 将参数传递给window.open
- 10. 将参数传递给`addEventListener`
- 11. 将参数传递给JsonSerialize
- 12. 将参数传递给SimpleHTTPRequestHandler
- 13. 将参数传递给Asynctask
- 14. 将参数传递给ApplicationBarIconButton.Click
- 15. 将参数传递给Html.ActionLink
- 16. 将参数传递给CollectionViews
- 17. 将参数传递给SQLDataSource
- 18. 将参数传递给mouseCallback
- 19. 将参数传递给iframe
- 20. 将参数传递给aapt
- 21. 将参数传递给QueueUserWorkItem
- 22. 将参数传递给execl
- 23. 将参数传递给chrome.commands
- 24. 将参数传递给JavaScript
- 25. 将参数传递给Silverlight
- 26. 将参数传递给PHPUnit
- 27. 将参数传递给api
- 28. 将参数传递给Asyntask
- 29. 将参数传递给Servlet
- 30. 将参数传递给Capistrano
我已经在c中编写了我的围兜没有C++ .. – 2012-07-15 16:44:06
@ChercheurChercheur这很好 - 我只用iostreams进行打印,你可以简单地把它变成stdio,除此之外没有别的C++特定的东西。 (构造函数属性在C中起作用,它在库加载时自动调用该函数,而不是C++构造函数) – Flexo 2012-07-15 17:20:13
请将我的lib中更多的参数传递给我的库,这可能吗? – 2012-08-04 16:54:39