Search code examples
mysqllinuxcmakecentoslibmysql

version node not found for symbol mysql_select_db@libmysqlclient_16


I was trying to build my app on linux using mysql c api, and got this error at link stage, it's working fine on windows. Please help, thanks!

error message:

/bin/ld: myapp.so : version node not found for symbol mysql_select_db@libmysqlclient_16
/bin/ld: failed to set dynamic section sizes: Bad value

OS: CentOS 7, 64-bit, (VM on virtual box)

Mysql: 5.6.24 (community edition, installed via yum)

.bashrc file

export LIBMYSQL_INCLUDE_DIR=/usr/include/mysql
export LIBMYSQL_LIBRARY=/usr/lib64/mysql
export LD_LIBRARY_PATH=/usr/lib64/mysql:$LD_LIBRARY_PATH

cmake file: (variables are set according to environment variables)

FILE(GLOB SRC_MYAPP myapp/*.c myapp/*.h)
INCLUDE_DIRECTORIES(${LIBMYSQL_INCLUDE_DIR})

ADD_LIBRARY(myapp ${SRC_MYAPP})
IF (MSVC_IDE)
  TARGET_LINK_LIBRARIES(myapp ${LIBMYSQL_LIBRARY}/libmysql)
ELSE ()
  TARGET_LINK_LIBRARIES(myapp ${LIBMYSQL_LIBRARY}/libmysqlclient_r.a)
ENDIF ()

Solution

  • Put @hank 's comment as answer

    I suppose you should add link_directories(/usr/lib64/mysql) before add_library and then target_link_libraries(myapp mysqlclient_r) – hank May 12 at 12:50