C++ 静态链接时出错++
我有一个问题,我想用mysql连接器的静态链接来编译我的应用程序 我的命令行: g++-o新闻服务器stdafx.cpp-lboost_系统-lboost_线程 -lpthread-lmysqlcpcconn-static/usr/lib/libmysqlcppcconn static.a-std=c++0x 但我有一个错误: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
/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。你的答案应该是正确的。我应该移除这个吗?我看不出有任何理由移除它。它提供了有用的附加信息,即使它不能解决眼前的问题。