针对OpenSSL构建程序(sscep):对'[...]'的未定义引用



我正在尝试为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焦油而不是7-zip提取的。

遵循所有文档后,这是我的(截断的(输出:

sscep.o:sscep.c:(.text+0x83): undefined reference to `WSAStartup@8'
sscep.o:sscep.c:(.text+0xa5): undefined reference to `WSACleanup@0'
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。另一个问题是,当我使用命令"-march=i486"构建openssl时,我在AMD皓龙上的虚拟化环境中运行是否是一个问题?

在一些帮助下,我终于可以解决这个问题!这是顺序问题和缺少图书馆的问题。这个组合杀死了我。

图书馆必须-lcrypto -lws2_32 -lgdi32而不仅仅是-lcrypto。此外,我必须在目标文件之后附加库,因此:$(CC) $(CFLAGS) $(OBJS) -lcrypto -lws2_32 -lgdi32 -o $(PROG)是正确的 make 行。

最后,有了这个,它编译得很好。我什至不需要任何架构标志之类的。

最新更新