Pet*_*aut 5 c linux macos linker ld
我有一个foo可以通过加载插件的程序dlopen().我正在编写一个这样的插件foobar,它与第三方库提供的功能接口libfoo.
在Linux上,我是这样构建的foobar:
gcc -fpic -c -o foobar.o foobar.c
gcc -fpic -shared -o foobar.so foobar.o -lbar
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
问题是,这不会检测未定义的符号,例如由于代码中的错误或头文件和库之间的不匹配.链接成功,您只有在加载插件或在插件中调用某些内容时才会收到错误(取决于dlopen()标志).
要检测共享库中的未定义符号,通常可以使用-Wl,-z,defs或者使用-Wl,--no-allow-shlib-undefined.但这会失败,因为它还会报告应该foo在运行时在程序中找到的符号.我想检测未定义的符号,但托管程序提供的符号除外.
例如,在Mac OS X上,这可以通过-bundle_loader选项完成.等效的链接命令将是
gcc -bundle -o foobar.so foobar.o -lbar -bundle_loader=foo
Run Code Online (Sandbox Code Playgroud)
并以我想要的方式检测未定义的符号.
如何在GNU/Linux或GNU ld上执行此操作?(我查看了ld手册页中列出的所有选项,但没有一个看起来很有希望.)
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |