C++ 静态链接时出错++

C++ 静态链接时出错++,c++,mysql,linux,gcc,static-linking,C++,Mysql,Linux,Gcc,Static Linking,我有一个问题,我想用mysql连接器的静态链接来编译我的应用程序 我的命令行: g++-o新闻服务器stdafx.cpp-lboost_系统-lboost_线程 -lpthread-lmysqlcpcconn-static/usr/lib/libmysqlcppcconn static.a-std=c++0x 但我有一个错误: /usr/bin/ld: cannot find -lmysqlcppconn /tmp/ccxpOfdZ.o: In function `IsEqualsDns(uns

我有一个问题,我想用mysql连接器的静态链接来编译我的应用程序

我的命令行:

g++-o新闻服务器stdafx.cpp-lboost_系统-lboost_线程 -lpthread-lmysqlcpcconn-static/usr/lib/libmysqlcppcconn 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
我怎样才能解决这个问题? 谢谢

您可以尝试使用g++-static参数

如果您来自Windows平台,那么针对Boost的链接会给您带来一些惊喜。typicall Boost安装(例如,./b2安装后)将生成动态库和静态库,并将它们放在同一目录中。通常,这两种库表单的扩展名只有.so或.a

Windows支持自动链接,这基本上意味着库文件的前几个字节中包含一些标志,指示它们是用于动态链接还是用于静态链接。在Linux平台上,情况并非如此,因为没有提供库名称的扩展名,链接器会混淆要加载的文件。因此,您需要告诉您的链接器您想要哪种形式的链接

您可以尝试使用g++-static参数

如果您来自Windows平台,那么针对Boost的链接会给您带来一些惊喜。typicall Boost安装(例如,./b2安装后)将生成动态库和静态库,并将它们放在同一目录中。通常,这两种库表单的扩展名只有.so或.a

Windows支持自动链接,这基本上意味着库文件的前几个字节中包含一些标志,指示它们是用于动态链接还是用于静态链接。在Linux平台上,情况并非如此,因为没有提供库名称的扩展名,链接器会混淆要加载的文件。因此,您需要告诉您的链接器您想要哪种形式的链接

库libsqlcppcon.a或libsqucppconn.so在哪里 静态还是动态?编译器正在查找它,并且 没有找到它

据推测,这与 /usr/lib/mysqlcppconn static.a。如果是这样的话,就不要再提了 -LMYSQLCPCPCON。或者只使用-lmysqlcpcconn static no 空格,忘记/usr/lib/libmysqlconn static.a。 这样的名字,不应该有对应的。所以, 这意味着g++将静态链接它,即使没有 -静态的。只有当两者都存在时,才需要-static 中的libmysqlconn-static.so和libmysqlconn static.a 同一个目录

关于第二个错误,它只是一个警告,但是 如果尝试在上运行链接程序,将导致问题 其他机器,甚至在升级您的机器后:如果 您可以在命令行中的任意位置使用-static 如果当前没有,则它将应用于以后链接的所有文件。 包括您不想链接的系统库 静态地。我的猜测是,没有必要使用-static 在上面如果是,请将其放在您要创建的库之前 希望静态链接,并立即放置一个-dynamic 之后,使任何以下库,包括系统 库将被动态链接。

库libsqlcppconn.a或libsqucppconn.so在哪里 静态还是动态?编译器正在查找它,并且 没有找到它

据推测,这与 /usr/lib/mysqlcppconn static.a。如果是这样的话,就不要再提了 -LMYSQLCPCPCON。或者只使用-lmysqlcpcconn static no 空格,忘记/usr/lib/libmysqlconn static.a。 这样的名字,不应该有对应的。所以, 这意味着g++将静态链接它,即使没有 -静态的。只有当两者都存在时,才需要-static 中的libmysqlconn-static.so和libmysqlconn static.a 同一个目录

关于第二个错误,它只是一个警告,但是 如果尝试在上运行链接程序,将导致问题 其他机器,甚至在升级您的机器后:如果 您可以在命令行中的任意位置使用-static 如果当前没有,则它将应用于以后链接的所有文件。 包括您不想链接的系统库 静态地。我的猜测是,没有必要使用-static 在上面如果是,请将其放在您要创建的库之前 希望静态链接,并立即放置一个-dynamic 之后,使任何以下库,包括系统
库将被动态链接。

这无助于他找到不存在的库。我不认为丢失的库是Boost的一部分。如果他确实想静态链接Boost和IMHO,那么他应该在Boost库的-l前面加-static,在最后一个库之后加-dynamic,因为你不想静态链接系统库,这就是警告的原因。@JamesKanze OK,tnx。你的答案应该是正确的。我应该移除这个吗?我看不出有任何理由移除它。它提供了有用的附加信息,即使它不能解决
眼前的问题。这无助于他找到一个不在那里的图书馆。我不认为丢失的库是Boost的一部分。如果他确实想静态链接Boost和IMHO,那么他应该在Boost库的-l前面加-static,在最后一个库之后加-dynamic,因为你不想静态链接系统库,这就是警告的原因。@JamesKanze OK,tnx。你的答案应该是正确的。我应该移除这个吗?我看不出有任何理由移除它。它提供了有用的附加信息,即使它不能解决眼前的问题。