2015-09-22 60 views
0

我试图编译在Visual Studio 2010中的网络dll项目在过去,原作者用于项目生成独立dll文件,就可能与它被用于服务器进行分发。如果我打开他们dll,我易拉罐看到这样的Dependency Walker(红色的物品是不是一个真正的问题,该dll工程):如果没有整个OpenSSL库,我可以使用河豚吗?

image description

现在我试图编译该项目,但对于32位和64位(64位和什么是我应该去工作),我产生一个需要安装的OpenSSL库:

image description

试图把libeay32.lib出构建的正义事业链接错误:

1> Finished searching libraries 
1>TTClient.obj : error LNK2001: unresolved external symbol _BF_set_key 
1>TTProtocol.obj : error LNK2001: unresolved external symbol _BF_ecb_encrypt 
1>D:\techsys\WebSightR220lib\Release\WebSightR220lib.dll : fatal error LNK1120: 2 unresolved externals 
+0

我曾经无数次从樱桃采摘的OpenSSL获得特定算法。它当然有效。较小的替代可能是LibTomCrypt – 0xC0000022L

+0

@ 0xC0000022L因为我真的只是想编译现有(巨大)的项目,改变libaries似乎是一个问题。实际上,如果我没有得到任何答案,我将链接19MB静态库。 –

+0

我OpenSSL的知识是有限的,但使用[单独执行(https://www.schneier.com/blowfish-download.html)的可能性? –

回答

0

原来联看似巨大的静态库是没有什么大问题,当你想使用OpenSSH的只是一小部分。编译器不会仅仅在二进制文件中复制这个库,它只会选择需要的部分。

+0

通常情况下,如果**链接器**(不是编译器)看到的符号不是必需的,并且支持LTO,情况确实如此。但是你的问题意味着你在一个不是这种情况或者你的配置阻止它工作的环境中工作(例如调试)。 – 0xC0000022L

+0

@ 0xC0000022L那么,当我在linux上做同样的操作时,得到的'.so'库有20MB,所以它确实取决于环境。然后,我甚至没有在Linux上编译任何东西,所以我仍然认为自己很幸运。 –

+0

有无符号等?事情是,在Windows上,这些天符号总是默认存储在PDB文件中,如果需要,您可以启用MAP文件。但在Linux上,符号默认存储在二进制文件中。你可以使用'objcopy'将它们解压缩到一个符号文件中。这就是说,你的比较更可能是基于对二进制文件的错误假设。另外假设你构建了* OpenSSL的'.so' *,那将会很大。因为链接器无法知道哪些符号可以优化。尽管如此,Windows上的'.dll'也是如此。 – 0xC0000022L

相关问题