【发布时间】:2011-05-19 06:59:37
【问题描述】:
为什么 -rdynamic 不导出 .a 文件中的符号,而是导出 .o 文件中的符号?
我在 .so 文件中有一个应用程序和一个插件。主应用程序使用一系列目标文件和一个静态库链接,如下所示:
CXXFLAGS = $(CXXFLAGS_COMMON) -rdynamic
STATICLIBS = ../Utilities/Utilities.a
...
all:
$(CXX) $(CXXFLAGS) -o $(SAMPLE) main.o $(STATICLIBS) $(SHAREDLIBS) $(INCLUDES)
(CXX是Ubunut上的g++ 4.5.2,我主要用-std=c++Ox编译)
在这种情况下,不会导出 Utilities.a 中的符号(即“objdump -t a.out | grep symbol”为空)。
如果我使用“ar x”来提取 .a 中的 .o 文件并仅使用 .o 进行链接,则符号会被插件导出并找到(如果您想知道,插件会加载 dlopen )。
我尝试使用 -Wl,-export-dynamic 但没有成功。
如上所述,我确实有一个解决方法,但我仍然希望了解我缺少什么。提前致谢!
【问题讨论】:
标签: gcc static-libraries dynamic-linking