【问题标题】:GCC suppress flagsGCC 抑制标志
【发布时间】:2012-05-21 14:00:48
【问题描述】:

我正在尝试使用我的 gcc 创建一个共享库。这是 vxworks 的 gcc(这可能是问题所在......)。

我使用 gcc 如下:

./gcc -shared -B/path/to/gnutools/bin -o test.so test.c

结果:

/path/to/ld: -r and -shared may not be used together 
collect2: ld returned 1 exit status

如果我对 linux gcc 进行同样的尝试,就没有问题。所以我猜 VxWorks 的 gcc 会自动将 -r(或 -i,相同且结果相同)标志传递给链接器。有没有办法抑制这种情况?

问候

马蒂

PS:将其设为静态并不是真正的替代方案...

【问题讨论】:

  • 什么是./gcc?它是您可以查看并创建编辑副本以删除 -r 的 shellscript 吗?
  • 是的,它是一个 shellscript。但是里面没有 -r 或 -i 。我刚刚添加了 -B(二进制)和 -I(包含)路径。如果我直接调用 gcc,它不会改变任何东西。

标签: gcc linker-errors vxworks


【解决方案1】:

尝试用-fPIC单独编译目标文件,然后链接:

gcc -Wall -fPIC -c -o test.o test.c gcc -Wall -shared -o test.so test.o

另一个建议是使用 libtool(至少要找出正确的标志)。

一种解决方法可能是直接使用ld

ld -shared -o test.so test.o -lc

【讨论】:

  • 结果还是一样...仍然想知道 -r 是从哪里来的。 libtool 似乎适用于 linux。我需要它用于 VxWorks。但是感谢这些想法:)
  • jeah 你的解决方法很有效。谢谢。仍在研究它,因为我需要 gcc 来链接它,因为其他参数。例如,我必须包含其他库。
  • 您可以继续使用ld 进行链接。其他库通过 Makefile 变量传递给 gcc,例如 LIBSLDADD;但是 gcc 只是将它们传递给下面的ld。所以你可以直接将这些变量传递给 ld。
猜你喜欢
  • 2019-04-27
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-02
相关资源
最近更新 更多