将共享对象库 (.so) 文件的生成分为两次而不是一次
Split generation of a Shared Object library (.so) file into two pass instead of one
我正在尝试从 'test.c' 和 test.exp
文件构建一个共享库 lib_test.so
。此 lib_test.so
文件将用作另一个应用程序的扩展。
应用文档指定通过以下命令一次性直接生成 tle lib_test.so
文件:
`gcc -q64 -o lib_test.so test.c -bM:Sre -bE:test.exp -bnoentry`
但我的要求是分两次构建库:
- 使用
gcc
命令编译生成test.o
文件。
- Link 使用
ld
命令生成库 lib_test.so
。
我试过如下:
- 执行编译步骤如下:
gcc -q64 -c -o test.o test.c
.
- 创建
lib_test.so
如下:ld -bM:Sre -bE:test.exp -bnoentry -o lib_test.so test.o
但它没有生成正确的 lib_test.so
文件。
我正在使用 Ubuntu 16.04 LTS 64 位和最新的 GCC
能否请您提出将流程分成两遍的正确方法...
感谢和问候。
您很少想使用 ld
来执行链接。 gcc 前端在设置正确标志等方面做得更好。因此,使用 gcc
.
即而不是
ld -bM:Sre -bE:test.exp -bnoentry -o lib_test.so test.o
做
gcc -bM:Sre -bE:test.exp -bnoentry -o lib_test.so test.o
在你的第二步中。
link使用 GCC 前端程序 gcc
和实际 linker ld
的最大区别是 GCC 前端添加了一些库到link编辑。最值得注意的是 GCC 运行时库(-lgcc_s
或 -lgcc
)和实际的标准 C 库(-lc
)。
当您直接调用 ld
时,您不会告诉它 link 那些库。
GCC 前端可能还会在您不知情的情况下传递给 ld
其他库和标志。对于 "one pass" 构建,将标志 -v
传递给 gcc
以获得详细输出并查看它使用的参数、标志和库。
我正在尝试从 'test.c' 和 test.exp
文件构建一个共享库 lib_test.so
。此 lib_test.so
文件将用作另一个应用程序的扩展。
应用文档指定通过以下命令一次性直接生成 tle lib_test.so
文件:
`gcc -q64 -o lib_test.so test.c -bM:Sre -bE:test.exp -bnoentry`
但我的要求是分两次构建库:
- 使用
gcc
命令编译生成test.o
文件。 - Link 使用
ld
命令生成库lib_test.so
。
我试过如下:
- 执行编译步骤如下:
gcc -q64 -c -o test.o test.c
. - 创建
lib_test.so
如下:ld -bM:Sre -bE:test.exp -bnoentry -o lib_test.so test.o
但它没有生成正确的 lib_test.so
文件。
我正在使用 Ubuntu 16.04 LTS 64 位和最新的 GCC
能否请您提出将流程分成两遍的正确方法...
感谢和问候。
您很少想使用 ld
来执行链接。 gcc 前端在设置正确标志等方面做得更好。因此,使用 gcc
.
即而不是
ld -bM:Sre -bE:test.exp -bnoentry -o lib_test.so test.o
做
gcc -bM:Sre -bE:test.exp -bnoentry -o lib_test.so test.o
在你的第二步中。
link使用 GCC 前端程序 gcc
和实际 linker ld
的最大区别是 GCC 前端添加了一些库到link编辑。最值得注意的是 GCC 运行时库(-lgcc_s
或 -lgcc
)和实际的标准 C 库(-lc
)。
当您直接调用 ld
时,您不会告诉它 link 那些库。
GCC 前端可能还会在您不知情的情况下传递给 ld
其他库和标志。对于 "one pass" 构建,将标志 -v
传递给 gcc
以获得详细输出并查看它使用的参数、标志和库。