我在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)
有人可以帮我解决这个问题吗?感谢。
答案 0 :(得分:1)
我在Unix下只使用过g ++,所以其中一些是基于你给出的例子(可能是错误的)。
你有几个问题。你从g ++得到一些奇怪的行为,因为它将这个C:\Program Files\MySQL\MySQL Connector C++ 1.1.0\lib\opt\mysqlcppconn.dll
视为不同的参数(由空格分隔)C:\Program
,Files\MySQL\MySQL
,Connector
,C++
和1.1.0\lib\opt\mysqlcppconn.dll
。这可以通过引用字符串"C:\Program Files\MySQL\MySQL Connector C++ 1.1.0\lib\opt\mysqlcppconn.dll"
来克服。
但是,传递给g ++的-L
参数用于指定库的搜索路径,因此我不希望您在此时指定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
,这恰好是你的已经过去了。
结论:,似乎可能是这样:-L C:\Program Files\MySQL\MySQL Connector C++ 1.1.0\lib\opt\mysqlcppconn.dll
确实应该指定要链接的库,而不是搜索路径。如果是这种情况,那么你应该使用-l
,而不是-L
它应该只是:-lmysqlcppconn
(至少它是如何在Unix中运行的,在windows下你可能需要指定一个扩展名,即-lmsqlcppcon.lib
)。
-L
参数指定的所有路径来解决缺失的链接,以查看它们是否有与提供的-l parameter
匹配的库。
我建议打开makefile:nbproject/Makefile-Release.mk
并查看此参数的来源并相应地更新。
查看其余的参数,值得注意的是,当它到达您的输出时,您可能会遇到类似的问题,因为它中还有一个空间似乎没有被转义:
-o dist/Release/MinGW-Windows/mysqlconnectorhw build/Release/MinGW-Windows/main.o
答案 1 :(得分: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