The symbol versioning solution for libmysqlclient in mysql 5.1 was pretty awful (export everything) and as of 5.5.8 the cmake build scripts have forgotten the issue entirely. So we now maintain our own list of exported symbols and jam it into the build with this hack. diff -up mysql-5.5.28/libmysql/CMakeLists.txt.p7 mysql-5.5.28/libmysql/CMakeLists.txt --- mysql-5.5.28/libmysql/CMakeLists.txt.p7 2012-08-29 10:50:46.000000000 +0200 +++ mysql-5.5.28/libmysql/CMakeLists.txt 2012-12-06 14:15:03.905461517 +0100 @@ -209,7 +209,7 @@ IF(NOT DISABLE_SHARED) SET(libmysql_link_flags) ENDIF() SET_TARGET_PROPERTIES(libmysql PROPERTIES LINK_FLAGS - "${libmysql_link_flags} ${LINK_FLAG_NO_UNDEFINED}") + "${libmysql_link_flags} -Wl,--version-script=libmysql.version ${LINK_FLAG_NO_UNDEFINED}") ENDIF() # clean direct output needs to be set several targets have the same name #(mysqlclient in this case)