我的 C++ 应用程序在默认动态链接下运行良好,但是...我试图将所有库静态链接到应用程序,因为不幸的是用户似乎无法安装适当的库(或者更准确地说,他们的 ISP 不会在正在使用的服务器上安装)。所以我添加了 -static 作为链接选项。LD
尝试打开 libgcc_s.a 失败,这似乎是错误的。 如果我理解正确的话(如果我有错误,请纠正我!),
LD 确实成功打开了 libgcc.a :
- libgcc_s 是 libgcc 的共享版本,因此是一个共享对象。
静态链接的可执行文件应该只使用 libgcc.a,而不是 libgcc_s,对吗? - 除了 -static 之外,我还需要指定哪些链接器参数?它似乎在 .a 风格中找到了所需的一切。
$ gcc --version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4 版权所有 (C) 2013 自由软件基金会,Inc.
$ uname -s -r --m
Linux 3.19.0-51-generic x86_64
在此先感谢您的帮助,此致,戴夫
附言:
g++ -Xlinker -static -o "airparse" ./src/ArcBuild.o ./src/ParsTool.o ./src/airparse.o ./src/airway.o ./src/coordint.o ./src/mapBuild.o
./src/mapdata.o ./src/n_assert.o
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status
make: *** [airparse] Error 1
答案1
不幸的是,似乎 -static 链接选项gcc(Ubuntu 4.8.4-2ubuntu1~14.04.4)4.8.4坏了。可能是某种规格错误?
无论如何,我通过升级到解决了这个问题gcc(Ubuntu 8.3.0-6ubuntu1)8.3.0并且此版本与 -static AOK 链接。