将错误与"-Wl,--no-undefined -Wl,--no-allow-shlib-undefined"链接
Linking errors with "-Wl,--no-undefined -Wl,--no-allow-shlib-undefined"
在GCC中使用标志"-Wl,--no undefined-Wl,--no-allow-shlib undefined"会在Travis CI映像上导致以下编译错误,但在我的机器上不会(两者都是Ubuntu 12.04 64位):
Linking CXX shared library libmocap.so
cd /tmp/_travis/build/src && /usr/bin/cmake -E cmake_link_script CMakeFiles/mocap.dir/link.txt --verbose=1
/usr/bin/g++ -fPIC --coverage -Werror -pedantic -Wno-long-long -Wall -Wextra -Wcast-align -Wcast-qual -Wformat -Wwrite-strings -Wconversion -fvisibility=hidden -Wl,--no-undefined -Wl,--no-allow-shlib-undefined -Wl,--as-needed -shared -Wl,-soname,libmocap.so.0.0.0 -o libmocap.so.UNKNOWN CMakeFiles/mocap.dir/abstract-marker.cc.o CMakeFiles/mocap.dir/abstract-virtual-marker.cc.o CMakeFiles/mocap.dir/color.cc.o CMakeFiles/mocap.dir/link.cc.o CMakeFiles/mocap.dir/marker-set-factory.cc.o CMakeFiles/mocap.dir/marker-set.cc.o CMakeFiles/mocap.dir/marker-trajectory-factory.cc.o CMakeFiles/mocap.dir/marker-trajectory.cc.o CMakeFiles/mocap.dir/marker.cc.o CMakeFiles/mocap.dir/mars-marker-set-factory.cc.o CMakeFiles/mocap.dir/math.cc.o CMakeFiles/mocap.dir/pose.cc.o CMakeFiles/mocap.dir/segment.cc.o CMakeFiles/mocap.dir/string.cc.o CMakeFiles/mocap.dir/trc-marker-trajectory-factory.cc.o CMakeFiles/mocap.dir/virtual-marker-one-point-measured.cc.o CMakeFiles/mocap.dir/virtual-marker-relative-to-bone.cc.o CMakeFiles/mocap.dir/virtual-marker-three-points-measured.cc.o CMakeFiles/mocap.dir/virtual-marker-three-points-ratio.cc.o CMakeFiles/mocap.dir/virtual-marker-two-points-measured.cc.o CMakeFiles/mocap.dir/virtual-marker-two-points-ratio.cc.o
/lib/x86_64-linux-gnu/libc.so.6: undefined reference to `_dl_argv@GLIBC_PRIVATE'
/lib/x86_64-linux-gnu/libc.so.6: undefined reference to `_rtld_global_ro@GLIBC_PRIVATE'
/usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.so: undefined reference to `__tls_get_addr@GLIBC_2.3'
/lib/x86_64-linux-gnu/libc.so.6: undefined reference to `_rtld_global@GLIBC_PRIVATE'
/lib/x86_64-linux-gnu/libc.so.6: undefined reference to `__libc_enable_secure@GLIBC_PRIVATE'
collect2: ld returned 1 exit status
make[2]: *** [src/libmocap.so.UNKNOWN] Error 1
奇怪的是,这并没有发生在我的机器上,因此有点难以复制。当启用这些标志时,链接libc和libstdc++的正确方法是什么?
(您可能会从输出中猜到,我使用CMake生成编译命令)
第二个参数的默认值是"--allow shlib undefined"。如果您选择该选项,代码可能会生成。
第二个参数涉及构建时检查,启用这意味着检查您链接的库是否在构建时连接了其依赖项。。事实并非如此。
第一个参数确保您没有忘记声明对运行时库的依赖关系(这也可能是运行时库对另一个运行时库所具有的依赖关系)。例如,如果您正在调用一个函数,而该函数的实现位于示例运行时库"libfunc.so"中,而该库反过来又将调用另一运行时库中的函数"libext.so",则通过声明对"func"answers"ext"的依赖关系时,将生成libfunc.so以在内部包含对libext的依赖引用。如果省略"--no undefined"并忘记添加依赖项声明,那么构建仍然会成功,相信运行时链接器会在运行时解析依赖项。由于构建是成功的,您可能会相信一切都会好起来,而不知道构建已将责任推迟到运行时链接器。但大多数情况下,运行时链接器并不是为了搜索未解析的引用而设计的,而是希望找到运行时库中声明的此类依赖关系。如果没有这样的引用,您将得到一个运行时错误。运行时错误通常比解决编译时错误成本高得多。
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- c++20[[no.unique_address]]中的新功能是什么
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- "no matching function for call to 'Vector::Vector'"错误
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- 处理"no operator found"
- 我在 ifstream input_file(文件名)行中收到错误"no matching function to call";
- 如何解决"no Qt platform plugin could be initialized"问题?
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- 为什么当我在 std::string 中打开文件名的 fstream 时出现"no matching function"错误?
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- do while 循环中的 if 语句以 yes 或 no 结尾
- 从 TVector2 类派生复杂类:"No matching function for call to Complex::Complex()"
- 错误消息:使用"string* +="后"no match for 'operator+='"
- Eulers 项目问题 no 345 听不懂几行代码
- "No-Const Pointer to Const "调用功能
- 如何在 c++ 中将 s1 和 s2 与 no if 语句进行比较
- 将错误与"-Wl,--no-undefined -Wl,--no-allow-shlib-undefined"链接
- 使用g++编译多线程代码(-Wl,--no根据需要不工作)