1

我在使用 C++ 下的 MYSQL 连接器构建 hello world 应用程序时遇到问题。这是构建日志:

"/usr/bin/make" -f nbproject/Makefile-Release.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory `/c/data/c++/MySqlConnectorHW'
"/usr/bin/make"  -f nbproject/Makefile-Release.mk dist/Release/MinGW-Windows/mysqlconnectorhw.exe
make[2]: Entering directory `/c/data/c++/MySqlConnectorHW'
mkdir -p dist/Release/MinGW-Windows
g++.exe -v -d    -v -L C:\Program Files\MySQL\MySQL Connector C++ 1.1.0\lib\opt\mysqlcppconn.dll -o dist/Release/MinGW-Windows/mysqlconnectorhw build/Release/MinGW-Windows/main.o -L/C/Program\ Files/MySQL/MySQL\ Connector\ C++\ 1.1.0/lib/opt -L/C/boost/libs -L/C/Program\ Files/MySQL/MySQL\ Connector\ C\ 6.0.2/lib/opt 
g++.exe: Files\MySQL\MySQL: No such file or directory
g++.exe: Connector: No such file or directory
g++.exe: C++: No such file or directory
g++.exe: 1.1.0\lib\opt\mysqlcppconn.dll: No such file or directory
Using built-in specs.
COLLECT_GCC=C:\MinGW\bin\g++.exe
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.5.2/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.5.2/configure --enable-languages=c,c++,ada,fortran,objc,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgomp --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-runtime-libs --disable-werror --build=mingw32 --prefix=/mingw
Thread model: win32
gcc version 4.5.2 (GCC) 
make[2]: Leaving directory `/c/data/c++/MySqlConnectorHW'
make[1]: Leaving directory `/c/data/c++/MySqlConnectorHW'
make[2]: *** [dist/Release/MinGW-Windows/mysqlconnectorhw.exe] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

BUILD FAILED (exit value 2, total time: 21s)

有人可以帮我解决这个问题吗?谢谢。

4

2 回答 2

1

我只在 Unix 下使用过 g++,所以其中一些是基于您给出的示例(并且可能是错误的)。

你有几个问题。你从 g++ 得到了一些奇怪的行为,因为它把它当作C:\Program Files\MySQL\MySQL Connector C++ 1.1.0\lib\opt\mysqlcppconn.dll不同的参数(用空格分隔)C:\ProgramFiles\MySQL\MySQLConnector和. 这可以通过引用字符串来克服。C++1.1.0\lib\opt\mysqlcppconn.dll"C:\Program Files\MySQL\MySQL Connector C++ 1.1.0\lib\opt\mysqlcppconn.dll"

但是,-L传递给 g++ 的参数用于指定库的搜索路径,因此我不希望您dll此时指定名称。我希望你通过-L"C:\Program Files\MySQL\MySQL Connector C++ 1.1.0\lib\opt"。根据您的类似-L论点,似乎也可以通过转义字符串中的代码来实现这一点,在这种情况下,您最终会得到:-L/C/Program\ Files/MySQL/MySQL\ Connector\ C++\ 1.1.0/lib/opt,碰巧您已经通过了。

结论:,似乎 this:-L C:\Program Files\MySQL\MySQL Connector C++ 1.1.0\lib\opt\mysqlcppconn.dll确实应该指定要链接的库,而不是搜索路径。如果是这种情况,那么您应该使用-l,而-L不仅仅是:(-lmysqlcppconn至少在 Unix 中它是这样工作的,在 Windows 下您可能需要指定扩展名 ie -lmsqlcppcon.lib)。

然后 g++ 将尝试通过搜索-L参数指定的所有路径来解决丢失的链接,以查看它们是否有任何与提供的-l parameter.

我建议打开 makefile:nbproject/Makefile-Release.mk并查看此参数的来源并相应地更新它。

查看您的其余参数,值得注意的是,当它到达您的输出时,您可能会遇到类似的问题,因为它还有一个似乎没有被转义的空间:

-o dist/Release/MinGW-Windows/mysqlconnectorhw build/Release/MinGW-Windows/main.o
于 2011-05-04T20:48:36.083 回答
0

在互联网上可以找到一些关于如何将 mysql-connector 的二进制版本与您自己的代码链接的评论:http: //dev.mysql.com/doc/refman/5.0/en/building-clients.html

另一种方法是构建 mysql-connector-c 和 mysql-connector-c++ 的源代码。正式版不支持 MinGW 作为目标。但是,以下帖子包含 MinGW 改编代码版本的链接: http://forums.mysql.com/read.php?117,425191,425191#msg- 425191

于 2011-08-03T14:10:16.437 回答