0

我正在尝试lib_test.so从“test.c”和test.exp文件构建一个共享库。该lib_test.so文件将用作另一个应用程序的扩展。lib_test.so应用程序文档通过以下命令直接指定生成 tle文件:

`gcc -q64 -o lib_test.so test.c -bM:Sre -bE:test.exp -bnoentry`

但我的要求是分两次构建库:

  1. 使用命令编译生成test.o文件。gcc
  2. lib_test.so链接以使用ld命令生成库。

我尝试如下:

  1. 执行编译步骤如下:gcc -q64 -c -o test.o test.c.
  2. 创建lib_test.so如下:ld -bM:Sre -bE:test.exp -bnoentry -o lib_test.so test.o

但它没有生成正确的lib_test.so文件。

我正在使用带有最新 GCC 的 Ubuntu 16.04 LTS 64 位

您能否建议将过程分为两遍的正确方法...

感谢和问候。

4

2 回答 2

2

你很少想用它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

在你的第二步。

于 2016-10-16T11:54:10.977 回答
1

gcc与 GCC 前端程序链接和与实际链接器链接的最大区别在于ldGCC 前端添加了一些要链接的库。最值得注意的是 GCC 运行时库 (-lgcc_s-lgcc) 和实际的标准 C 库 ( -lc)。

当您ld直接调用时,您不会告诉它与这些库链接。

ld在您不知情的情况下,GCC 前端可能还会传递其他库和标志。对于“一次通过”构建,将标志传递-vgcc详细输出并查看它使用的参数、标志和库。

于 2016-10-17T05:25:18.740 回答