我有一个程序,myprogram它与一个静态便利库链接,调用它libconvenience.a,它包含一个函数,func().该函数func()不会在任何地方调用myprogram; 它需要能够从插件库中调用plugin.so.
该符号func()未动态导出myprogram.如果我跑
nm myprogram | grep func
Run Code Online (Sandbox Code Playgroud)
我一无所获.但是,它不会遗漏libconvenience.a:
nm libconvenience/libconvenience.a | grep func
00000000 T func
我正在使用automake,但是如果我在命令行上手动执行最后一个链接步骤,它也不起作用:
gcc -Wl,--export-dynamic -o myprogram *.o libconvenience/libconvenience.a `pkg-config --libs somelibraries`
Run Code Online (Sandbox Code Playgroud)
但是,如果我像这样链接程序,跳过使用便利库并链接libconvenience.a直接进入的目标文件,就会func()显示myprogram符号:
gcc -Wl,--export-dynamic -o myprogram *.o libconvenience/*.o `pkg-config --libs somelibraries`
Run Code Online (Sandbox Code Playgroud)
如果我在func()某处添加一个虚拟调用myprogram,那么func()也会显示在myprogram符号中.但我认为--export-dynamic应该导出所有符号,无论它们是否在程序中使用过!
我在Fedora 14上使用automake 1.11.1和gcc 4.5.1.我也使用Libtool 2.2.10构建plugin.so(但不是便利库.)
我没有忘记把 …