联动失败,这是怎么回事?
Linkage fails, what's going on?
我正在尝试在 Ubuntu 12.04 64 位上构建一个特定的程序。该程序需要编译 32 位。
我安装了ia32-libs
和gcc-multilib
软件包。
我设法在 3 台不同的计算机上编译它,但在这台计算机上,它因一个奇怪的错误而失败。由于某种原因,libm.so 未正确拾取,或者库有问题。
这是实际的编译行,因为它是从生成文件中提取的,因此失败。
gcc -o x86_32_obj/foo x86_32_obj/foomain.o -m32 -fPIC -fno-stack-protector -lc -lgcc -lm -lpthread -lrt -lstdc++ ../libfoo/lib/./libfii.x86_32.a
这是输出
/usr/bin/ld: ../libfoo/lib/./libfoo.x86_32.a(NK_Meas.o): undefined reference to symbol 'expf@@GLIBC_2.0'
/usr/bin/ld: note: 'expf@@GLIBC_2.0' is defined in DSO /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib32/libm.so so try adding it to the linker command line
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib32/libm.so: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
make[1]: *** [foo] Error 2
make: *** [foo] Error 2
我看到了与链接顺序相关的此类错误。可以通过将 libm 链接指令放在链接配置的最末尾来解决此错误。
这些相互依赖关系在很大程度上依赖于系统,这可能就是为什么相同的命令在其他系统上工作的原因。
发现问题。显然,我链接的库文件是使用不同版本的 GCC 编译的。我不知道它到底有什么关系,但是一旦我将 gcc 编译器替换为与库一起使用的编译器,它就可以工作了。
相关文章:
- 使用递归的数组的最小值.这是怎么回事
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- 绕道重铸瓷砖层是怎么回事
- 架 (U+67B6) 与en_US不符.UTF-8.这是怎么回事?
- R 中的算术在数字上比整数更快。这是怎么回事?
- 我的代码运行良好,但现在当尝试将其制作成模板时,我遇到了许多看似无关的错误。这是怎么回事?
- 在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?
- 弄清楚这段代码是怎么回事(递归下降案例研究)
- 分配器密集和稀疏是怎么回事?
- 传递引用C++,指针的向量.这是怎么回事?
- __vector_base_common是怎么回事?
- (对象)不命名类型.怎么回事
- 变量已在 .obj 中定义;这是怎么回事?
- Sublime上的EasyClangComplete是怎么回事?
- 重复输出的类型是怎么回事,它如何区分迭代次数和 Ascii 代码?
- 标准::地图使用.这是怎么回事?核心转储?我做得不正确?
- llvm libcxx的源代码是怎么回事?
- Win32 文件 IO 工作,但打开 et.失败.这是怎么回事
- 联动失败,这是怎么回事?