我有一个问题,我想使用 mysql 连接器的静态链接来编译我的应用程序。
我的命令行:
g++ -o newserver stdafx.cpp ... -lboost_system -lboost_thread -lpthread -lmysqlcppconn -static /usr/lib/libmysqlcppconn-static.a -std=c++0x
但是我有错误:
/usr/bin/ld: cannot find -lmysqlcppconn
/tmp/ccxpOfdZ.o: In function `IsEqualsDns(unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
Server.cpp:(.text+0x356e): warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
collect2: ld returned 1 exit status
我该如何解决这个问题? 谢谢!
最佳答案
库libsqlcppconn.a
或libsqucppconn.so
在哪里
(静态或动态)?编译器正在寻找它,并且
没有找到它。
据推测,这与
/usr/lib/mysqlcppconn-static.a
。如果是这样,只需删除
-lmysqlcppconn
。或者只是使用 -lmysqlcppconn-static
(没有
空格),并忘记 /usr/lib/libmysqlconn-static.a
。
这样的名字,不应该有对应的.so
,
这意味着 g++ 将静态链接它,即使没有
-静态
。如果两者都有,则只需要 -static
一个 libmysqlconn-static.so
和一个 libmysqlconn-static.a
在
同一目录。
关于第二个错误(这只是一个警告,但是
如果您尝试运行链接的程序,将会出现问题
其他机器,甚至在您的机器升级后):如果
您可以在命令行中的任何位置使用 -static
(就像您
目前正在这样做),然后它适用于之后链接的所有文件。
包括您不想链接的系统库
静态地。我的猜测是 -static
不是必需的(请参阅
多于);如果是,请将其放在您要访问的图书馆前面
想要静态链接,并立即放置一个 -dynamic
之后(以便任何以下库,包括系统
库,将被动态链接)。
关于c++ - 静态链接 g++ 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14340583/