我有一个关于使用 CMake 链接共享库的问题。
从源代码构建 OpenBLAS 并成功安装后。在 /opt/OpenBLAS/include 中有头文件,在 /opt/OpenBLAS/lib 中有共享库和静态库。
如果我有一个名为 cpp_gemm.cpp 的玩具程序,我可以通过键入来构建它
g++ -o cpp_gemm cpp_gemm.cpp -I/opt/OpenBLAS/include -L/opt/OpenBLAS/lib -lopenblas
并在没有错误消息的情况下执行它。
但是我想用 CMake 来构建它,所以我在 CMakeLists.txt 中编写了以下规则
cmake_minimum_required(VERSION 2.8.4)
project(CppGEMM)
include_directories(/opt/OpenBLAS/include)
link_directories(/opt/OpenBLAS/lib)
add_executable(cpp_gemm cpp_gemm.cpp)
target_link_libraries(cpp_gemm openblas)
在我创建构建文件夹并进入它之后,我输入
cmake ..
make
成功构建程序。但我会得到
Illegal instruction (core dumped)
执行后。
谷歌搜索相关问题后,发现replace
link_directories(/opt/OpenBLAS/lib)
和
link_directories(/opt/OpenBLAS)
可以解决我的问题。也就是说,我可以成功构建程序并执行它而不会出现错误消息。
我很困惑,但我找不到任何材料来实现它。谁能告诉我为什么会这样?非常感谢!