c++ - 静态链接 g++ 时出错

标签 c++ mysql linux gcc static-linking

我有一个问题,我想使用 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.alibsqucppconn.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/

相关文章:

mysql - 添加外键产生错误 "#1215 - Cannot add foreign key constraint"

linux - Bash 是默认的,但当我运行“bash : in terminal?”时仍然会发生变化

c++ - 使用 CMake、CUDA 9.0 RC 和 Visual Studio 2017 安装带有 contrib 模块的 OpenCV 3.3.0

c++ - 无法使用 boost.sh 脚本制作的 Boost 框架来制作 cpp-netlib

php - XML 或 SQL - 仅频繁读取数据

linux - SVN Hook pre-revprop-change 不工作

linux - Python 脚本输出参数模板

c++ - 我第一次接触Boost...包含错误

c++ - 静态方法/字段的继承 C++

mysql - SQL 在计数和分组依据中使用 CASE