我有一个c ++应用程序,我试图在Linux下构建,它需要链接到第三方共享库,但是这个库是用最新版本的GCC / glibc(4.8.3 / 2.18)构建的)。当我尝试使用较新版本的GCC / glibc(4.4.7 / 2.12)构建我的应用程序时,构建的链接阶段失败,ld抱怨未定义的引用,这些引用是对较新的libstdc ++中定义的函数的引用。
第三方给了我一个libstdc ++和libgcc_s的预编译版本用于库,但是如何在我的构建中使用这些版本?
如何在使用系统GCC的同时告诉GCC使用预编译库而不是系统库?
我尝试使用“-nodefaultlibs”选项并包含“-lstdc ++”和“-L”选项,但它似乎对未定义的引用没有影响。
我在链接过程中遇到的错误示例:
undefined reference to std::__throw_bad_function_call()@GLIBCXX_3.4.14'
undefined reference to std::length_error::~length_error()@GLIBCXX_3.4.15'
答案 0 :(得分:1)
我设法通过在链接命令的对象列表中指定libstdc ++和libgcc_s共享对象的完整路径来成功构建应用程序(例如/home/mike/Downloads/libstdc++.so.6)。这样,我不需要使用任何其他选项,例如“-nostdlibs”,只需要确保在运行应用程序时通过LD_LIBRARY_PATH可以使用链接的共享对象。