0

我正在使用一个内置于 Redhat 的应用程序,该应用程序由 1 个与多个库链接的进程组成。如果我将所有库构建为共享库,它会正确运行,但如果我将库构建为静态库,则它不会运行。在这两种情况下似乎都正确链接(至少没有未定义的引用)。

应用程序和库非常复杂,所以我没有通过代码来搜索问题。我正在为共享版本和静态版本构建完全相同的源代码,所以我无法想象这是一个代码问题。

此类问题的可能解释是什么?我已经包含了我用于源代码的构建命令,以及每种情况下的库

用于创建共享对象的命令:

g++ -fPIC -shared -Wl,-as-needed -m64 -Wl,soname,.. -o ... -LANG:std -Wl,--warn-once <object files>

用于创建静态库的命令:

ar cr <libname> <object files>

用于构建源文件的命令(在这两种情况下):

g++ -fPIC -m64 -c -Werror -Wno-deprecated -g

请注意,我计划将其移植到不支持共享库的不同平台,因此需要让应用程序与静态库一起使用。我希望这里有人以前见过这个问题,并且可以就如何继续提供一些建议。如果没有,我的下一个选择是开始调试代码以比较应用程序在这两种情况下的执行方式。

我能想到的唯一会导致这种情况的是我的静态库的链接顺序不正确 - 并且链接器从其中一个库中提取了错误的函数。但如果是这种情况,我认为某处会出现“多重定义”错误。

4

0 回答 0