gcc - CMake链接共享库-找不到lOgreMain

标签 gcc linker cmake shared-libraries ogre

我已经建立了自己的 Ogre3D http://ogre3d.org二进制文件,现在我想将我在 Qt 中的项目链接到它们(我使用 CMake 作为我的构建工具)。这是我的CMakeLists.txt文件 :

project(ogre_face_test)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})

include_directories( "/home/XXX/programming/SDKs/OGRE_1.8.1_BUILD/include" "." )

link_directories("/home/XXX/programming/SDKs/OGRE_1.8.1_BUILD/lib")
target_link_libraries( ogre_face_test "OgreMain" )

.../BUILD/lib目录我有这样的文件:libOgreMain.so , libOgreMain.so.1.8.1等等。

我在 Qt Creator 中链接时收到此错误:
/usr/bin/cmake -H/home/XXX/programming/c++/ogre_face_sample/ogre_face_test -B/home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build/CMakeFiles /home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory `/home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build'
make -f CMakeFiles/ogre_face_test.dir/build.make CMakeFiles/ogre_face_test.dir/depend
make[2]: Entering directory `/home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build'
cd /home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/XXX/programming/c++/ogre_face_sample/ogre_face_test /home/XXX/programming/c++/ogre_face_sample/ogre_face_test /home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build /home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build /home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build/CMakeFiles/ogre_face_test.dir/DependInfo.cmake --color=
make[2]: Leaving directory `/home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build'
make -f CMakeFiles/ogre_face_test.dir/build.make CMakeFiles/ogre_face_test.dir/build
make[2]: Entering directory `/home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build'
Linking CXX executable ogre_face_test
/usr/bin/cmake -E cmake_link_script CMakeFiles/ogre_face_test.dir/link.txt --verbose=1
/usr/bin/c++       CMakeFiles/ogre_face_test.dir/main.cpp.o CMakeFiles/ogre_face_test.dir/FacialAnimation.cpp.o  -o ogre_face_test -rdynamic -lOgreMain 
/usr/bin/ld: cannot find -lOgreMain
collect2: error: ld returned 1 exit status
make[2]: *** [ogre_face_test] Error 1
make[2]: Leaving directory `/home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build'
make[1]: *** [CMakeFiles/ogre_face_test.dir/all] Error 2
make[1]: Leaving directory `/home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build'
make: *** [all] Error 2

编辑

另一方面,如果我使用 qmake而不是 CMake使用此文件:
TARGET = qt_test_1
TEMPLATE = app

SOURCES += main.cpp\
        FacialAnimation.cpp

HEADERS  += FacialAnimation.h

INCLUDEPATH += /usr/include\
            /home/monkey/programming/SDKs/OGRE_1.8.1_BUILD/include
DEPENDPATH += /usr/include
LIBS += -L/home/monkey/programming/SDKs/OGRE_1.8.1_BUILD/lib -lOgreMain

它链接得很好。

最佳答案

CMake 文档说:

  • link_directories: Specify directories in which the linker will look for libraries.

    link_directories(directory1 directory2 ...)
    

    Specify the paths in which the linker should search for libraries. The command will apply only to targets created after it is called. For historical reasons, relative paths given to this command are passed to the linker unchanged (unlike many CMake commands which interpret them relative to the current source directory).



(强调我的)所以你必须在调用 add_executable 之前设置目录.

关于gcc - CMake链接共享库-找不到lOgreMain,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12817060/

相关文章:

c++ - 可以定义一个完全通用的 swap() 函数吗?

c++ - 为什么调试器总是在这个程序中跳过一行?

c++ - 编译依赖于仅包含 .so 或 .a 文件的 boost 库的程序

c++ - 将英特尔的 MKL(BLAS 和 LAPACK)链接到 GCC

gcc - 使用 GCC 链接静态库的正确方法

cmake - 在 Visual Studio 2017 中使用已安装的 CMake 而不是嵌入的 CMake

c++ - 依赖外部库的CMake导出包

c - 编译 GCC-7.2 时出错

c++ - 海湾合作委员会 11 : How to tell CMake I don't want the default C++ GNU extensions?

c++ - 如何将 TagLib 1.11.1 设置为我在 OS X 上的 Qt Creator 项目的静态库?