Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 根据可执行文件链接共享库的GCC_C++_C_Gcc_Linker_Linker Errors - Fatal编程技术网

C++ 根据可执行文件链接共享库的GCC

C++ 根据可执行文件链接共享库的GCC,c++,c,gcc,linker,linker-errors,C++,C,Gcc,Linker,Linker Errors,我有以下问题。我有一个共享库,它只是一组链接在一起的翻译单元,所以当我编译这个共享库时,我不会得到任何链接器错误(未定义的引用,即使我可能有) 共享库从一个可执行文件动态加载,该可执行文件还包含共享库正在使用的导出(库中使用的引用在运行时解析) 主要的问题是我需要未定义的引用警告,这样我就可以静态地修复它们,而不是等待应用程序崩溃 我在某个地方读到,我可以将“-Wl,-no undefined”传递给gcc,这样我就可以把这些错误取回来,它确实有效,但它也给了我所有可执行文件导出的未定义引用。我

我有以下问题。我有一个共享库,它只是一组链接在一起的翻译单元,所以当我编译这个共享库时,我不会得到任何链接器错误(未定义的引用,即使我可能有)

共享库从一个可执行文件动态加载,该可执行文件还包含共享库正在使用的导出(库中使用的引用在运行时解析)

主要的问题是我需要未定义的引用警告,这样我就可以静态地修复它们,而不是等待应用程序崩溃

我在某个地方读到,我可以将“-Wl,-no undefined”传递给gcc,这样我就可以把这些错误取回来,它确实有效,但它也给了我所有可执行文件导出的未定义引用。我只想将这些警告过滤到翻译单元的范围内


这可能吗?如果没有,如何定义对具有共享库导出的可执行文件的引用。

您可以尝试将库和主程序链接到
-Wl,-z,现在
。这将使运行时ldso立即解析所有引用,如果未找到任何引用,则抛出错误

否则,我不会在链接器手册中看到这样一个选项:“允许这个ELF满足符号,但实际上不要将它列为所需的DT_”

您可以尝试使用
-Wl,--no-undefined
并用脚本解析输出,这样您就可以过滤掉您知道主程序会满足的符号


另一种选择可能是标记主程序提供的所有符号,然后仍然使用
-Wl,--no-undefined
。弱符号不会被报告为错误。

通常,未解析的引用会导致链接失败。这不清楚你到底在做什么。请在你的问题中加入一个答案。