在Linux上,我正在构建像这样的foobar:
gcc -fpic -c -o foobar.o foobar.cgcc -fpic -shared -o foobar.so foobar.o -lbar
到现在为止还挺好.
问题是,这不会检测未定义的符号,例如由于代码中的错误或头文件和库之间的不匹配.链接成功,您只有在加载插件或在插件中调用某些内容时才会收到错误(取决于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
并以我想要的方式检测未定义的符号.
如何在GNU / linux或GNU ld上执行此 *** 作? (我查看了ld手册页上列出的所有选项,但没有一个看起来很有希望.)
解决方法 我不知道这样做.但是,如果’foo’的结构在你的控制之下,你可以将’foo’中的所有逻辑移动到一个新的共享库中,该库导出正确的符号,然后将你的插件和主线链接到该库. 总结以上是内存溢出为你收集整理的如何在GNU / Linux上链接插件时巧妙地检测未定义的符号?全部内容,希望文章能够帮你解决如何在GNU / Linux上链接插件时巧妙地检测未定义的符号?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)