相关疑难解决方法(0)

如果使用-fPIC构建目标文件,我怎么能用objdump之类的东西来判断?

如何使用类似的东西来判断objdump是否已经构建了一个目标文件-fPIC

gcc shared-libraries objdump fpic

53
推荐指数
2
解决办法
3万
查看次数

有没有办法确定.a或.so库已被编译为位置独立代码?

我在针对lapack编译numpy库时遇到链接错误,表明我需要使用-fPIC编译lapack.我以为我做到了那一点.有没有办法确定生成的lapack库是否与位置无关?

gcc position fpic

21
推荐指数
2
解决办法
8829
查看次数

将存档(.a)链接到共享对象(.so)

我正在将一些共享对象文件编译成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)

知道我做错了什么吗?


编辑:

当我尝试切换时 …

c++ linker shared-libraries

19
推荐指数
2
解决办法
1万
查看次数

如何在共享对象中包含存档的所有对象?

当编译我们的项目,我们创建几个档案(静态库),说liby.alibz.a每个包含定义函数的对象文件y_function()z_function().然后,这些存档被连接在一个共享对象中,比如说libyz.so,这是我们的主要可分发目标之一.

g++  -fPIC  -c -o y.o y.cpp
ar cr liby.a y.o
g++  -fPIC  -c -o z.o z.cpp
ar cr libz.a z.o
g++ -shared -L. -ly -lz -o libyz.so
Run Code Online (Sandbox Code Playgroud)

当使用该共享对象到示例程序,比方说x.c,链接失败,因为到功能的未定义的引用y_function()z_function().

g++ x.o -L. -lyz -o xyz
Run Code Online (Sandbox Code Playgroud)

但是,当我将最终可执行文件直接与归档(静态库)链接时,它可以工作.

g++ x.o -L. -ly -lz -o xyz
Run Code Online (Sandbox Code Playgroud)

我的猜测是,归档中包含的目标文件没有链接到共享库中,因为它们中没有使用它们.如何强制包容?

编辑:

可以使用--whole-archive ld选项强制包含.但如果导致编译错误:

g++ -shared '-Wl,--whole-archive' -L. -ly -lz -o libyz.so
/usr/lib/libc_nonshared.a(elf-init.oS): In function `__libc_csu_init':
(.text+0x1d): undefined …
Run Code Online (Sandbox Code Playgroud)

linux linker gcc archive

15
推荐指数
1
解决办法
1万
查看次数

标签 统计

gcc ×3

fpic ×2

linker ×2

shared-libraries ×2

archive ×1

c++ ×1

linux ×1

objdump ×1

position ×1