13

用于在 buntu 11.04 中工作的构建,现在在 12.04 中没有。

位置有冲突someLib.so。也就是说,它正在寻找错误的位置。 /usr/lib/here/someLib.so是正确的位置。

当我在 ccmake 中运行 'c' 配置 cmd 时,它注意到了冲突,.. 一次。现在 ccmake 不再抱怨,但错误仍然存​​在。 runtime library [someLib.so] in /usr/lib may be hidden by files in: /usr/lib/here

CMakeLists.txt 中导致构建错误的行是:

ADD_EXECUTABLE(test main.cpp)
TARGET_LINK_LIBRARIES(test moreStuff evenMoreStuff)

build.make我在文件中看到了问题。这是由ccmake生成的。我不知道 ccmake 从哪里得到的想法someLib.so是 at /usr/lib/,而不是 @ /usr/lib/here/。我认为这将是SET()某处的声明。我没有找到它。

1)配置文件(ccmake 'c' cmd)叫什么?它会在哪里(相同的目录?)?我想如果我删除它,我将能够再次看到错误。(更改 CMakeFile.txt 似乎没有这样做。)
2)我怎样才能找出设置位置的位置someLib.so?(我在找什么?)

我讨厌CCMAKE。谢谢

4

2 回答 2

1

我会说这是 find_library 调用之一的问题。如果我没记错的话,这是在您的环境指向两个不同的位置时发生的,这两个位置都包含同名的库文件。

您可以通过更改您的环境使其不指向两个位置或使用 NO_*_PATH 之一和 find_library 调用来防止这种情况发生,以防止 cmake 找到这两个位置(例如,您可以为此 find_library 定义自己的路径和使用 NO_DEFAULT_PATH 防止 cmake 使用环境路径 - 请参阅文档:http ://www.cmake.org/cmake/help/v2.8.10/cmake.html#command:find_library )

find_library(someLib_location NAMES someLib PATHS /usr/lib/here/ NO_DEFAULT_PATH)

关于 1)我认为它们被称为 CMakeCache 文件,但最安全的方法是简单地删除整个构建结构(如果你是从源代码构建的,这不是问题)

关于 2)我会按库名称搜索 CMakeList.txt 文件(没有 .so 后缀和 lib 前缀,因为它们可能是由 CMAKE_FIND_LIBRARY_PREFIXES 和 CMAKE_FIND_LIBRARY_SUFFIXES 变量添加的)

于 2013-01-16T09:40:16.523 回答
1

首先,我建议使用以下命令检查软件包是否已安装:

dpkg -L SomeLib

如果未安装,请使用 apt-get 或任何其他方法安装,然后重试。如果它已安装但位于错误的位置,请使用链接命令创建正确的位置,如下所示:

sudo ln -s locationOfLibFromAboveCommand locationItShouldBe

我希望它有所帮助。

于 2019-02-15T11:07:01.187 回答