构建共享库

时间:2016-05-24 20:22:47

标签: c++ ld

我正在尝试在我的应用程序的一个组件上构建一个共享库(在linux上)。

我使用以下命令创建它:

g++ -g -shared -Wl,--cref,-Map,ComponentA.map -o ComponentA.so \
 ../../components/componentA_all.o -nostdlib -lgcc

在链接阶段,我收到以下错误:

/home/manik/components/componentA.cpp:218: undefined reference to `__dso_handle'
/usr/bin/ld: ../../components/componentA_all.o: relocation R_386_GOTOFF against undefined hidden symbol `__dso_handle' can not be used when making a shared object
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
makefile:188: recipe for target 'ComponentA.so' failed

如果我在“componentA.cpp”中有静态数组,例如:

static component_info_a cx_objs[10];

错误来源的行号位于此位置。 我不明白错误的原因是什么。 struct component_info_a的声明写在同一个componentA.cpp文件中。

此源文件的链接阶段之前的编译命令是:

g++ -Wp,-MMD,componentA.d -pthread -pipe -c -Woverloaded-virtual  -DUSING_X11 -g -D_REENTRANT -pthread -fpic  -I../.. -I/usr/share -frandom-seed=componentA.cpp -fno-stack-protector -Wall   -fno-inline -o componentA.o componentA.cpp 

配方“componentA_all.o”还有其他源文件,它们是:

componentA.cpp
componentA_drag.cpp
componentA_multitouch.cpp

makefile用于创建“componentA_all.o”的命令是:

ld -r -o componentA_all.o componentA_drag.o componentA_multitouch.o

0 个答案:

没有答案