Atm*_*ons 19 c++ linker shared-libraries
我正在将一些共享对象文件编译成archive.a
:
$ g++ -c -Iinclude/ -fPIC -O0 -o object1.o source1.cpp
$ g++ -c -Iinclude/ -fPIC -O0 -o object2.o source2.cpp
$ ar rvs archive.a object1.o object2.o
r - object1.o
r - object2.o
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.结果archive.a
具有一些KB的良好大小.与转储nm
相应的对象,文件包含的文件中显示.
现在我想将这些档案中的几个编译成共享对象文件.
g++ -g -O0 -Iinclude/ -I/usr/include/somelibrary -shared -o libLibrary.so archive1.a archive2.a
Run Code Online (Sandbox Code Playgroud)
结果是我生成的库文件几乎为空:
$ nm -D libLibrary.so
w _Jv_RegisterClasses
0000000000201010 A __bss_start
w __cxa_finalize
w __gmon_start__
0000000000201010 A _edata
0000000000201020 A _end
0000000000000578 T _fini
0000000000000430 T _init
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?
编辑:
当我尝试切换时-Wl,--whole-archive
,会发生以下情况:
/usr/lib/x86_64-linux-gnu/libc_nonshared.a(elf-init.oS): In function `__libc_csu_init':
(.text+0xd): undefined reference to `__init_array_end'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libc_nonshared.a(elf-init.oS): relocation R_X86_64_PC32 against undefined hidden symbol `__init_array_end' can not be used when making a shared object
/usr/bin/ld: final link failed: Bad value
collect2: ld returned 1 exit status
make: *** [libKeynect.so] Error 1
Run Code Online (Sandbox Code Playgroud)
nos*_*nos 19
未使用的.a文件中的符号/目标文件将被链接器丢弃.
使用-Wl,--whole-archive
了链接到包括整个某文件编辑,你将需要添加-Wl,--no-whole-archive
您指定的库后为好,这样整个事情会-Wl,--whole-archive archive1.a archive2.a -Wl,--no-whole-archive
归档时间: |
|
查看次数: |
11226 次 |
最近记录: |