V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LINEX
V2EX  ›  问与答

求助, cmake 写完后无法正常编译

  •  
  •   LINEX · 2016-09-25 17:33:09 +08:00 · 2594 次点击
    这是一个创建于 2145 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一个 mysql cpp connector 的小例子,在 mac 下编译命令:

    g++ -o test_install  -I/usr/local/include -I/usr/local/include/cppconn -Wl, -lmysqlcppconn test_mysql.cpp  
    

    编译完后生成 test_install 可以正常运行,连接到数据库并执行。

    如何写出一个 CMakeLists.txt 有同样效果? 我的 CMakeLists.txt 如下:

    cmake_minimum_required(VERSION 3.6)
    project(TestCPP)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    set(SOURCE_FILES
            test_mysql.cpp)
    add_executable(TestCPP ${SOURCE_FILES})
    

    但是编译报错:

    Undefined symbols for architecture x86_64:
      "sql::mysql::get_driver_instance()", referenced from:
          _main in test_mysql.cpp.o
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    make[2]: *** [TestCPP] Error 1
    make[1]: *** [CMakeFiles/TestCPP.dir/all] Error 2
    make: *** [all] Error 2
    

    如何修改 CMakeLists.txt 使编译正确通过?

    第 1 条附言  ·  2016-09-25 20:00:47 +08:00
    修改 CmakeLists.txt 后编译成功!
    ```
    cmake_minimum_required(VERSION 3.6.1)
    project(TestCPP)

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    set(SOURCE_FILES
    test_mysql.cpp)

    find_library(
    MYSQL_LIBRARY
    mysqlcppconn
    PATHS
    /usr/local/lib
    NO_DEFAULT_PATH
    )

    add_executable(TestCPP ${SOURCE_FILES})

    TARGET_LINK_LIBRARIES(TestCPP PUBLIC ${MYSQL_LIBRARY})

    ```
    2 条回复    2016-09-25 19:57:15 +08:00
    wsy2220
        1
    wsy2220  
       2016-09-25 19:49:39 +08:00 via Android
    简单的办法是加上这两行:
    ```
    include_directories(/usr/local/include
    /usr/local/include/cppconn)
    set(CMAKE_EXE_LINKER_FLAGS -lmysqlcppconn)
    ```
    更好的方法是用 find_package 或 find_library
    LINEX
        2
    LINEX  
    OP
       2016-09-25 19:57:15 +08:00
    @wsy2220 多谢,成功解决,刚开始用 CMake 不太熟练:)
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4292 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:33 · PVG 14:33 · LAX 23:33 · JFK 02:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.