免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7229 | 回复: 5
打印 上一主题 下一主题

[C++] 请教cygwin下编译C++的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-18 12:44 |只看该作者 |倒序浏览
环境: win2000, Eclipse+CDT, cygwin

希望调用mysqlclient.lib 中的函数. 于是在Project的property的C/C++ build中加了include的路径和lib的路径.

但编译的时候显示 如下.

gcc -IC:\Program Files\MySQL\MySQL Server 5.0\include -O0 -g3 -Wall -c -fmessage-length=0 -oMySQLClient.o ../MySQLClient.c
Finished building: ../MySQLClient.c

Building target: MySQLClient.exe
gcc  -o MySQLClient.exe MySQLClient.o    -l"C:\Program Files\MySQL\MySQL Server 5.0\lib\opt\mysqlclient.lib"
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find -lC:\Program Files\MySQL\MySQL Server 5.0\lib\opt\mysqlclient.lib

include的路径没问题, 但lib的路径好像没找到. 于是就改成 用cygwin中的路径, 结果如下.

gcc -IC:\Program Files\MySQL\MySQL Server 5.0\include -O0 -g3 -Wall -c -fmessage-length=0 -oMySQLClient.o ../MySQLClient.c
Finished building: ../MySQLClient.c

Building target: MySQLClient.exe
gcc  -o MySQLClient.exe MySQLClient.o    -l"/cygdrive/c/Program Files/Mysql/MySQL Server 5.0/lib/opt/mysqlclient.lib"
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find -l/cygdrive/c/Program Files/Mysql/MySQL Server 5.0/lib/opt/mysqlclient.lib

仍然找不到,  请大家帮忙看看, 如何设置才正确呢?

谢谢!!

论坛徽章:
0
2 [报告]
发表于 2007-04-18 14:29 |只看该作者
把 mysqlclient.lib 更名为 libmysqlclient.a,并加上 -L/cygdrive/c/Program\ Files/MySQL/MySQL\ Server\ 5.0/lib/opt

请仔细操作。注意:路径名中本来有盘符的,现已转为 /cygdrive/x,路径名中原来是空格的,现换成 \ 加一个空格连用。可以用 echo `cygpath -u 'C:\Program Files\MySQL\MySQL Server 5.0\lib\opt'` 来确认一下。(请再次区分 `'

论坛徽章:
0
3 [报告]
发表于 2007-04-18 16:36 |只看该作者
谢谢, 还是找不到, 请再帮忙看看,

文件 C:\Program Files\MySQL\MySQL Server 5.0\lib\opt\mysqlclient.lib 已经改成叫 C:\Program Files\MySQL\MySQL Server 5.0\lib\opt\libmysqlclient.a了,

我直接在Cygwin下命令行执行了一下

gcc  -o MySQLClient.exe MySQLClient.o  -L"/cygdrive/c/Program\ Files/MySQL/My
SQL\ Server\ 5.0/lib/opt"  -l/cygdrive/c/Program\ Files/MySQL/MySQL\ Server\ 5.
0/lib/opt/libmysqlclient.a
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find
-l/cygdrive/c/Program Files/MySQL/MySQL Server 5.0/lib/opt/libmysqlclient.a
collect2: ld returned 1 exit status

后来我直接把libmysqlclient.a拷贝到当前目录下执行
gcc  -o MySQLClient.exe MySQLClient.o -llibmysqlclient.a 还是找不到。

gcc  -o MySQLClient.exe MySQLClient.o -lmysqlclient  也试过, 找不到。

会不会是我的Cygwin设置的问题?

[ 本帖最后由 shikn 于 2007-4-18 16:50 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-04-18 17:08 |只看该作者
根据命令行参数的惯例,-L 用来指定函数库的路径(相对/绝对),-l 只能 指定库的文件名称,并且不包括后缀名和 lib 这个前缀。比如指定 -lc,编译工具会寻找 libc.a,但如果指定了 -llibc.a 则寻找的是 liblibc.a.a,这显然违背了我们的初衷。

gcc  -o MySQLClient.exe MySQLClient.o  -L/cygdrive/c/Program\ Files/MySQL/My
SQL\ Server\ 5.0/lib/opt  -lmysqlclient

这样再试试看?

论坛徽章:
0
5 [报告]
发表于 2007-04-19 08:53 |只看该作者
我用这句试验了一下, 我把
当前目录, 还有/cygdrive/c/Program\ Files/MySQL/MySQL\ Server\ 5.0/lib/opt 和 D:\cygwin\lib 和 D:\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\  下面全拷贝了libmysqlclient.a

然后执行

$ gcc  -o MySQLClient.exe MySQLClient.o  -L/cygdrive/c/Program\ Files/MySQL/MySQL\ Server\ 5.0/lib/opt  -lmysqlclient
MySQLClient.o: In function `main':
/cygdrive/d/eclipse/eclipse/workspace/MySQLClient/Debug/../MySQLClient.c:14: undefined reference to `_mysql_init'
/cygdrive/d/eclipse/eclipse/workspace/MySQLClient/Debug/../MySQLClient.c:17: undefined reference to `_mysql_real_connect'
/cygdrive/d/eclipse/eclipse/workspace/MySQLClient/Debug/../MySQLClient.c:19: undefined reference to `_mysql_error'
/cygdrive/d/eclipse/eclipse/workspace/MySQLClient/Debug/../MySQLClient.c:24: undefined reference to `_mysql_query'
/cygdrive/d/eclipse/eclipse/workspace/MySQLClient/Debug/../MySQLClient.c:25: undefined reference to `_mysql_error'
/cygdrive/d/eclipse/eclipse/workspace/MySQLClient/Debug/../MySQLClient.c:29: undefined reference to `_mysql_use_result'
/cygdrive/d/eclipse/eclipse/workspace/MySQLClient/Debug/../MySQLClient.c:32: undefined reference to `_mysql_fetch_row'
/cygdrive/d/eclipse/eclipse/workspace/MySQLClient/Debug/../MySQLClient.c:36: undefined reference to `_mysql_free_result'
/cygdrive/d/eclipse/eclipse/workspace/MySQLClient/Debug/../MySQLClient.c:37: undefined reference to `_mysql_close'
collect2: ld returned 1 exit status


$ ls
MySQLClient.d  libmysqlclient.a  objects.mk  subdir.mk
MySQLClient.o  makefile          sources.mk

还是链接不上, 看起来像是找到了, 不过库中有那些符号,

$ nm libmysqlclient.a |grep _mysql_init
         U _mysql_init@4
00000000 T _mysql_init@4
00000000 T _mysql_init_character_set

$ nm libmysqlclient.a |grep _mysql_free_result
         U _mysql_free_result@4
00000000 T _mysql_free_result@4

但还是无法链接上, 是否前面的地址有些怪, 为何全是0呢?

谢谢langue 这么耐心的解答我的疑问 :)

论坛徽章:
0
6 [报告]
发表于 2007-12-04 13:31 |只看该作者
感谢langue,我也遇到了这样的问题,把 lib 和 .a 去掉就可以连接了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP