2012-05-10 25 views
0

我正在尝试为Windows构建一个名为sscep(http://www.klake.org/~jt/sscep/)的工具。它不能本地运行,我有一个“修补程序”,它可以改变sscep,使其在Windows上编译。 应用补丁后,它确实编译完美,但链接器螺丝。我在minGW/msys中使用gcc 最初的消息是它无法找到加密库,因此我在库中添加了“-L ../ openssl-mingw/lib”,这样就不会产生更多的错误。我的命令中还有命令行开关-lcrypto:gcc -L../openssl-mingw/lib -lcrypto sscep.o init.o net.o sceputils.o pkcs7.o ias.o fileutils.o -o sscep。在这个目录中是一个libcrypto.a。 OpenSSL本身编译时只需运行./config && make && make test && make install。此外,源使用minGW tar而不是7-zip提取。针对OpenSSL构建一个程序(sscep):未定义引用'[...]'

sscep.o:sscep.c:(.text+0x83): undefined reference to `[email protected]' 
sscep.o:sscep.c:(.text+0xa5): undefined reference to `[email protected]' 
sscep.o:sscep.c:(.text+0x3d5): undefined reference to `BIO_new_mem_buf' 
sscep.o:sscep.c:(.text+0x3e0): undefined reference to `ASN1_INTEGER_new' 
sscep.o:sscep.c:(.text+0x414): undefined reference to `a2i_ASN1_INTEGER' 
sscep.o:sscep.c:(.text+0x432): undefined reference to `ASN1_INTEGER_to_BN' 
sscep.o:sscep.c:(.text+0x448): undefined reference to `BN_bn2dec' 
sscep.o:sscep.c:(.text+0xb7e): undefined reference to `EVP_des_cbc' 
sscep.o:sscep.c:(.text+0xbaf): undefined reference to `EVP_bf_cbc' 
sscep.o:sscep.c:(.text+0xbda): undefined reference to `EVP_des_cbc' 
sscep.o:sscep.c:(.text+0xc02): undefined reference to `EVP_des_ede3_cbc' 
sscep.o:sscep.c:(.text+0xc48): undefined reference to `EVP_md5' 
sscep.o:sscep.c:(.text+0xc79): undefined reference to `EVP_md5' 
sscep.o:sscep.c:(.text+0xca1): undefined reference to `EVP_sha1' 

这正好为在那里的每个文件,也应该每一个功能叫:

下的所有文件,这是我的(截)后输出。 在这里搜索和谷歌导致缺少库,但省略了-L指令从上面我得到另一个关于找不到libcrypto的错误。所以我认为图书馆实际上是被发现的,但有些地址或地址错误?

这里我的编译器/链接器知识实际上结束了。 如果补丁可能对此负责(我不相信这些都是openssl函数和编译工作),那么我可以为您提供补丁。

编辑:有没有我应该提供的信息,以便有人可以帮助我?如果这有什么不同,openssl的版本是1.0.1。 关于此主题:如果确实有所作为,可能由于版本错误而发生此错误。据我了解链接器理论,这个错误不应该源于错误的版本,除非所有下面的函数被不同的命名替换(但编译器会抱怨,我猜?)。

另一个补充:因为我在一个64位的Windows 7上,我试图用-m32标志来编译它,但这并没有帮助。我认为,因为mingw已经只有32位,我甚至不能构建x64。另一个问题是,在AMD Opteron虚拟化环境中运行的问题是,是否使用命令“-march = i486”构建openssl?

回答

1

有了一些帮助,我终于可以弄清楚了!这是命令的问题,也是缺少库的问题。这个组合杀了我。

这些库必须是-lcrypto -lws2_32 -lgdi32而不仅仅是-lcrypto。此外,我不得不追加的对象文件,所以:$(CC) $(CFLAGS) $(OBJS) -lcrypto -lws2_32 -lgdi32 -o $(PROG)是正确的生产线。

最后这个,它编译好。我甚至不需要任何架构标志等。

相关问题