【问题标题】:Why simple mysql++ code compiles standalone, but not in project?为什么简单的 mysql++ 代码可以独立编译,但不能在项目中编译?
【发布时间】:2011-08-18 14:07:29
【问题描述】:

首先是小程序:

#include <mysql++.h>
using namespace mysqlpp;

void mainuu ()
{ Connection conn("mysql", "localhost", "root", "pwd");}

如果我在 CodeLite 中将其编译为一个文件或以这种方式:

g++ -I/usr/include/mysql -I/usr/include/mysql++ -lmysqlclient -lmysqlpp -o Test mysql_api.cpp

没关系 但是,当我尝试用这个文件构建整个项目时,我得到了这个:

g++ -o ./Debug/server ./Debug/main.o ./Debug/log.o ./Debug/packet.o ./Debug/mysql_api.o  -L.   
./Debug/mysql_api.o: In function `mainuu()':
/home/asyler/.codelite/workspace/test/server/mysql_api.cpp:10: undefined reference to `mysqlpp::Connection::Connection(char const*, char const*, char const*, char const*, unsigned int)'
/home/asyler/.codelite/workspace/test/server/mysql_api.cpp:12: undefined reference to `mysqlpp::Connection::query(char const*)'
/home/asyler/.codelite/workspace/test/server/mysql_api.cpp:13: undefined reference to `mysqlpp::SQLTypeAdapter::SQLTypeAdapter(char const*, bool)'
/home/asyler/.codelite/workspace/test/server/mysql_api.cpp:13: undefined reference to `mysqlpp::operator<<(mysqlpp::quote_type1, mysqlpp::SQLTypeAdapter const&)'
/home/asyler/.codelite/workspace/test/server/mysql_api.cpp:19: undefined reference to `mysqlpp::operator<<(std::basic_ostream<char, std::char_traits<char> >&, mysqlpp::String const&)'
/home/asyler/.codelite/workspace/test/server/mysql_api.cpp:10: undefined reference to `mysqlpp::Connection::~Connection()'
/home/asyler/.codelite/workspace/test/server/mysql_api.cpp:10: undefined reference to `mysqlpp::Connection::~Connection()'
./Debug/mysql_api.o: In function `mysqlpp::Row::operator[](int) const':
/usr/include/mysql++/row.h:328: undefined reference to `mysqlpp::Row::at(unsigned int) const'
./Debug/mysql_api.o: In function `mysqlpp::Query::store()':
/usr/include/mysql++/query.h:467: undefined reference to `mysqlpp::Query::str(mysqlpp::SQLQueryParms&)'
/usr/include/mysql++/query.h:467: undefined reference to `mysqlpp::SQLTypeAdapter::SQLTypeAdapter(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
/usr/include/mysql++/query.h:467: undefined reference to `mysqlpp::Query::store(mysqlpp::SQLTypeAdapter const&)'
collect2: ld returned 1 exit status
make[1]: *** [Debug/server] Error 1
make[1]: Leaving directory `/home/asyler/.codelite/workspace/test/server'
make: *** [All] Error 2

这里是 CodeLite g++ 编译器设置:

-g -I/usr/include/mysql -I/usr/include/mysql++ -lmysqlclient -lmysqlpp -L/usr/lib/mysql -L/usr/lib/mysql++ -lmysql++

【问题讨论】:

    标签: c++ mysql mysql++


    【解决方案1】:

    看起来您需要编辑 CodeLite 项目设置并添加您在命令行中传递的这些设置-lmysqlclient -lmysqlpp。填写Library Path and Libraries fields on Linker tab

    【讨论】:

    • 链接对象时不需要包含目录。
    • 哦.. 它的工作原理是这样的。现在成功编译后,CodeLite 不会创建可执行文件。我觉得是我的错。试着找到它
    • 实际上,现在我对链接器选项感到困惑。你能告诉我需要填写链接器选项吗?
    • 只需填写Libraries字段mysqlclient mysqlpp
    • 它仍然没有创建可执行文件
    【解决方案2】:

    那些是链接器错误。

    当您创建最终的可执行文件时,您仍然必须提供对所有库函数的引用,就像您在编译单个翻译单元时所做的那样。

    所以,这次也将-lmysqlclient -lmysqlpp 传递给g++

    如果您使用的是集成开发环境,请相应地配置项目的构建设置。特别是,我看到CodeLite has both "Compiler" and "Linker" build settings。您需要的是“链接器”设置。

    有关构建过程的更多信息(即编译、链接和区别),请阅读一本好的 C++ 书籍。

    【讨论】:

    • 没有任何改变。这是我的编译器选项: -g -I/usr/include/mysql -I/usr/include/mysql++ -lmysqlclient -lmysqlpp -L/usr/lib/mysql -L/usr/lib/mysql++ -lmysql++
    • @vladimar:您更改了错误的选项。这些都没有用于最终构建阶段:您可以在向我们展示的输出中看到这一点。寻找 linker 选项,而不是 compiler 选项。
    • 谢谢,我就这样弄
    猜你喜欢
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    相关资源
    最近更新 更多