我正在尝试使用MySQL C ++连接器库编译一段相当简单的代码。我正在静态地将库链接到我的应用程序。
g++ "./source/main.cpp" -std=c++11 -m64 -static -pthread -lmysqlcppconn -lboost_system -lboost_filesystem -lfastcgipp -lboost_thread -lboost_date_time -o "/var/www/index.fcgi"
但是,当我执行此命令来编译程序时,我遗留了数百个undefined reference to ...
错误。几个例子:
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libmysqlcppconn.a(mysql_client_api.cpp.o): In function `sql::mysql::NativeAPI::LibmysqlStaticProxy::affected_rows(st_mysql*)':
(.text+0x164): undefined reference to `mysql_affected_rows'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libmysqlcppconn.a(mysql_client_api.cpp.o): In function `sql::mysql::NativeAPI::LibmysqlStaticProxy::autocommit(st_mysql*, char)':
(.text+0x18d): undefined reference to `mysql_autocommit'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libmysqlcppconn.a(mysql_client_api.cpp.o): In function `sql::mysql::NativeAPI::LibmysqlStaticProxy::close(st_mysql*)':
(.text+0x1ac): undefined reference to `mysql_close'
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
collect2: error: ld returned 1 exit status
当我链接库动态链接时,一切正常。
如何静态链接此库?
答案 0 :(得分:4)
因为您是静态链接,所以您必须引用您使用的所有库,甚至是间接引用的,而在动态链接时则不需要这样。
这些未定义的函数位于C MySQL API中,因此您应该添加-lmysqlclient