免费注册 查看新帖 |

Chinaunix

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

[C++] 有关openssl在c++环境下编程,只能编译,不能链接??? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-14 22:14 |只看该作者 |倒序浏览
有关openssl在c++环境下,能编译,不能链接输出???

设置:

用的eclipse CDT+ MinGW5.1, openssl0.98d
mingw按照网上的配置下的是安装版.openssl也是安装版,里面有支持mingw的库,要拷到mingw的lib下..h 拷到include里.
eclipse CDT 没有什么设置的.其中有一项改一下.
windows环境里设置一下.加入include_path, and lib_path,

include 设置是应该没有问题的,起码eclipse能够assistant help,也是能编译成功的原因吧.

但是链接时却不成成功.

我试写了一个简单的输出"hello the world",能够链接成功.但是只要有openssl的函数,就只能编译到.o文件, 不能链接输出.exe文件.怪了.

测试代码

能够编译,并链接成功,输出一个可执行程序.
using namespace std;
int main(){
        cout<<"hello the world";

return 0;
}

但是只有有openssl函数,只能编译,不能链接.

我的Makefile文件.

all:
        g++ -c test.c
        g++ -o test.exe test.o
        g++ -c  Client4c.cpp
        g++  -o Client4c Client4c.o

输出输出.

make -k all
g++ -c test.c           ------------------测试程序
test.c:22:2: warning: no newline at end of file
g++ -o test.exe test.o                        ------链接测试程序,可输出.exe程序.也能运行...
g++ -c  Client4c.cpp                       --------带有openssl的函数,能编译..但是下面不能运行.
Client4c.cpp:140:2: warning: no newline at end of file
g++  -o Client4c Client4c.o
Client4c.o(.text+0x4a):Client4c.cpp: undefined reference to `WSAStartup@8'
Client4c.o(.text+0x7a):Client4c.cpp: undefined reference to `SSL_library_init'
Client4c.o(.text+0x7f):Client4c.cpp: undefined reference to `SSL_load_error_strings'
Client4c.o(.text+0x84):Client4c.cpp: undefined reference to `TLSv1_client_method'
Client4c.o(.text+0x9:Client4c.cpp: undefined reference to `SSL_CTX_new'
Client4c.o(.text+0xc:Client4c.cpp: undefined reference to `SSL_CTX_set_verify'





.................省略....



请有使用openssl经验的同仁,帮助看一下...


多谢..


tyshanchn#hotmail.com

论坛徽章:
0
2 [报告]
发表于 2007-01-14 22:31 |只看该作者
g++  -o Client4c Client4c.o


指定一下库的名称,比如用 -lcrypto

不指定的话,就算 ld 能知道库的路径,可还是不知道库的名称。

这种情况,类似于:你被派到一个陌生的城市,但派你去的那个人没告诉你干什么,这样是不是很迷茫?

----

论坛徽章:
0
3 [报告]
发表于 2007-01-14 22:49 |只看该作者

error again

make -k all
g++ -c test.c
test.c:22:2: warning: no newline at end of file
g++ -o test.exe test.o
g++  -le:/mingw/lib/libeay32.a -le:/mingw/lib/ssleay32.a -o Client4c Client4c.cpp
Client4c.cpp:140:2: warning: no newline at end of file
E:\MinGW\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot find -le:/mingw/lib/libeay32.a
collect2: ld returned 1 exit status
make: *** [all] Error 1

论坛徽章:
0
4 [报告]
发表于 2007-01-14 22:53 |只看该作者
-le:/mingw/lib/libeay32.a


-LE:/MinGW/lib -leay32 -lssl32

因为你用 -le:/mingw/lib/libeay32.a 的时候,ld 会尝试使用 “libe:/mingw/lib/libeay32.a.a”,而这个文件显然是不存在的。

----

论坛徽章:
0
5 [报告]
发表于 2007-01-15 13:04 |只看该作者

多谢,但还是不行,还是不能编译啊????

make -k all
g++  -LE:/MinGW/lib  -llibeay32 -lssleay32 -g -o Client4c Client4c.cpp
Client4c.cpp:140:2: warning: no newline at end of file
E:\MinGW\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot find -llibeay32
collect2: ld returned 1 exit status
make: *** [all] Error 1


all:
        g++  -LE:/MinGW/lib  -llibeay32 -lssleay32 -g -o Client4c Client4c.cpp

E:/MinGW/lib 下的ssl库为,  一共为四个文件,有关openssl的,按要求都要拷到e:/mingw/lib的目录下.
/libeay32.a /libeay32.def /ssleay32.a /ssleay32.def


别的还有什么要求吗???

论坛徽章:
0
6 [报告]
发表于 2007-01-15 13:09 |只看该作者

修改了一下makefile文件.

all:
        g++  -LE:/MinGW/lib  -leay32 -lssleay32 -g -o Client4c Client4c.cpp

但是新的问题是

make -k all
g++  -LE:/MinGW/lib  -leay32 -lssleay32 -g -o Client4c Client4c.cpp
Client4c.cpp:140:2: warning: no newline at end of file
E:\MinGW\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot find -lssleay32
collect2: ld returned 1 exit status
make: *** [all] Error 1

论坛徽章:
0
7 [报告]
发表于 2007-01-15 13:11 |只看该作者

继续修改一下makefile,改了一下lib目录里的名ssleay32.o改为libssleay32.o,其它不变

all:
        g++  -LE:/MinGW/lib  -leay32 -lssleay32 -g -o Client4c Client4c.cpp

make -k all
g++  -LE:/MinGW/lib  -leay32 -lssleay32 -g -o Client4c Client4c.cpp
Client4c.cpp:140:2: warning: no newline at end of file
e:/TEMP/ccOsbaaa.o(.text+0x4a): In function `main':
C:/Eclipse/cplus/eclipse3.21/workspace/hi/Client4c.cpp:44: undefined reference to `WSAStartup@8'
e:/TEMP/ccOsbaaa.o(.text+0x7a):C:/Eclipse/cplus/eclipse3.21/workspace/hi/Client4c.cpp:49: undefined reference to `SSL_library_init'
e:/TEMP/ccOsbaaa.o(.text+0x7f):C:/Eclipse/cplus/eclipse3.21/workspace/hi/Client4c.cpp:50: undefined reference to `SSL_load_error_strings'
e:/TEMP/ccOsbaaa.o(.text+0x84):C:/Eclipse/cplus/eclipse3.21/workspace/hi/Client4c.cpp:52: undefined reference to `TLSv1_client_method'

论坛徽章:
0
8 [报告]
发表于 2007-01-15 18:53 |只看该作者
====

ssleay32.o

这不是库。你应当使用 -lssl32

====

http://forums.miranda-im.org/showthread.php?t=4545

----

[ 本帖最后由 langue 于 2007-1-15 18:54 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2007-01-16 20:58 |只看该作者

多谢,很有帮助.

能够顺利的编译过了.openssl的库加到MinGW要在命令中加入到编译中.里面的默认库却不用.我已经设置LIBRARY_PATH了,可不知为什么.

多谢langue..
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP