当我运行
我已经通过使用
系统/问题信息: Ubuntu 16.04,64位 编译Python 3.5.5启用共享 CMake 3.11.0 根据Tsyvarev评论进行编辑:共享和静态库在同一个目录中
如果您查看CMake文件,特别是FindPythonLibs.cmake(CMake 3.11.0)的142-163行,我认为它首先找到共享库,然后是静态库,但再次说明我不是CMake专家(这是一个CMake新手尝试从非常少的上下文中挑选源代码做什么)。
谢谢您抽出时间阅读这个问题。任何帮助都将不胜感激。
编辑:4/13/18
好吧,这很有趣。我检查了CMAKE_FIND_LIBRARY_SUFFIXES变量,并且值为:".so.a"。这几乎变得足够有趣,让我想弄清楚如何根据这个问题/答案调试CMake文件。当/如果我开始时,我会再次更新我的帖子。
编辑4/16/18
好吧,我开始准备进行调试过程。当我准备好时,我发现了错误。在构建Python 3.5.5的共享版本时,我忘记删除CMakeCache.txt,因此FIND_PACKAGE命令没有重新运行。感谢您抽出时间回答这个问题,Tsyvarev。我学到了新东西。
FindPackage(PythonLibs)
时,它首先找到静态Python库python3.5m.a,而不是python3.5m.so。这是CMake的预期行为吗?我怀疑不是,根据CMake bug report;但是,这个bug报告是在13年前提交的。事情随时间改变。如果共享库具有优先级,那么为什么CMake会找到静态库而不是共享库?我已经通过使用
SET()
命令告诉CMake我的构建正确的库位置来解决了构建问题。我正在寻找一个答案,以便更好地理解CMake在这种情况下的行为,因为我正在尝试解决一个不同的问题,并且发现静态库优先于共享库对我来说似乎很奇怪。系统/问题信息: Ubuntu 16.04,64位 编译Python 3.5.5启用共享 CMake 3.11.0 根据Tsyvarev评论进行编辑:共享和静态库在同一个目录中
如果您查看CMake文件,特别是FindPythonLibs.cmake(CMake 3.11.0)的142-163行,我认为它首先找到共享库,然后是静态库,但再次说明我不是CMake专家(这是一个CMake新手尝试从非常少的上下文中挑选源代码做什么)。
谢谢您抽出时间阅读这个问题。任何帮助都将不胜感激。
编辑:4/13/18
好吧,这很有趣。我检查了CMAKE_FIND_LIBRARY_SUFFIXES变量,并且值为:".so.a"。这几乎变得足够有趣,让我想弄清楚如何根据这个问题/答案调试CMake文件。当/如果我开始时,我会再次更新我的帖子。
编辑4/16/18
好吧,我开始准备进行调试过程。当我准备好时,我发现了错误。在构建Python 3.5.5的共享版本时,我忘记删除CMakeCache.txt,因此FIND_PACKAGE命令没有重新运行。感谢您抽出时间回答这个问题,Tsyvarev。我学到了新东西。
set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
。记得在重新搜索库之前清除CMake缓存(CMakeCache.txt
)。 - Tsyvarev