Openssl 将libssl与nmake一起使用

Openssl 将libssl与nmake一起使用,openssl,nmake,Openssl,Nmake,我得到以下错误 LIBS = ws2_32.lib winmm.lib advapi32.lib crypt32.lib user32.lib gdi32.lib libeay32.lib ssleay32.lib OSCOMPAT = /DWIN32 /D_WIN32_WINNT=0x0400 VSCOMPAT = /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE CFLAGS= -I . -I$C /MT

我得到以下错误

    LIBS =   ws2_32.lib winmm.lib advapi32.lib  crypt32.lib user32.lib gdi32.lib   libeay32.lib ssleay32.lib 

OSCOMPAT = /DWIN32 /D_WIN32_WINNT=0x0400
VSCOMPAT = /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE  
CFLAGS= -I . -I$C /MT /W3 $(OSCOMPAT) $(VSCOMPAT) -nologo $(EXTRACFLAGS)

test: $(CCLIENTLIB) test.obj oauth.obj hash.obj oauth_http.obj xmalloc.obj 
    LINK /NOLOGO mtest.obj oauth.obj hash.obj oauth_http.obj xmalloc.obj  $(LIBS) 


test.obj:test.c 
oauth.obj: oauth.c
hash.obj: hash.c
oauth_http.obj: oauth.h oauth_http.c
xmalloc.obj: xmalloc.c
make文件中的问题是什么。 如何将libssl与我的应用程序链接?

您可以从这里下载代码
(包括liboauth中的代码)

为了总结OP评论中的对话,我下载了示例代码并对其运行了nmake(makefile.nt)。我确实收到链接器错误,但缺少的符号来自Win32 LIB。我将user32.lib和gdi32.lib添加到makefile中的LIBS列表中,然后将其干净地链接(该构建与VS2005、VS2008和VS2010一起工作)


正如OP所指出的,在添加这两个附加库时,它也清晰地链接在一起。我不清楚这将如何帮助从libeay32.lib解析这些符号。所以我怀疑对make文件的更改导致了所有.obj文件的完全重建和编译。完全干净的构建导致它正常工作。因此,可能(我只是猜测)最初编译的.obj文件不正确(可能是编译器与链接器不兼容?),而完整的重建使所有内容保持一致。

为了总结OP评论中的对话,我下载了示例代码,并对其运行了nmake(makefile.nt)。我确实收到链接器错误,但缺少的符号来自Win32 LIB。我将user32.lib和gdi32.lib添加到makefile中的LIBS列表中,然后将其干净地链接(该构建与VS2005、VS2008和VS2010一起工作)


正如OP所指出的,在添加这两个附加库时,它也清晰地链接在一起。我不清楚这将如何帮助从libeay32.lib解析这些符号。所以我怀疑对make文件的更改导致了所有.obj文件的完全重建和编译。完全干净的构建导致它正常工作。因此,可能(我只是猜测)最初编译的.obj文件不正确(可能是编译器与链接器不兼容?),而完整的重建使所有内容都保持一致。

您是否收到任何编译器错误(或仅链接错误)?例如,PEM_read_bio_PrivateKey符号作为未解析符号出现似乎有点奇怪。在我使用的OpenSSL版本中,它仅作为一个宏存在,定义为调用PEM_ASN1_read_bio。因此,它似乎不应该显示为一个未解决的符号。这让我怀疑您是否包含了正确的标题。不过,我使用的版本可能与您的不同。@请注意,我只收到链接错误。@Vivek:我不确定问题出在哪里。作为一项健全性检查,您可以运行
dumpbin/exports libeay32.lib
(和ssleay32.lib),以确保它们实际上包含函数定义。@Mark Wilkins,我用该工具检查过,并且定义了符号。我在新评论中附上了完整的代码。@Vivek:我下载了它并运行了“nmake-f makefile.nt”。我必须将user32.lib和gdi32.lib添加到makefile.nt中的LIBS语句中,然后将其干净地链接起来。我在VisualStudio2005、2008和2010中试用过。所以我猜你的路径设置不正确。您需要运行为命令行工具(例如vcvars32.bat)设置环境的批处理文件。可能是它使用了错误的链接器或可能是错误的编译器。您是否收到任何编译器错误(或仅链接错误)?例如,PEM_read_bio_PrivateKey符号作为未解析符号出现似乎有点奇怪。在我使用的OpenSSL版本中,它仅作为一个宏存在,定义为调用PEM_ASN1_read_bio。因此,它似乎不应该显示为一个未解决的符号。这让我怀疑您是否包含了正确的标题。不过,我使用的版本可能与您的不同。@请注意,我只收到链接错误。@Vivek:我不确定问题出在哪里。作为一项健全性检查,您可以运行
dumpbin/exports libeay32.lib
(和ssleay32.lib),以确保它们实际上包含函数定义。@Mark Wilkins,我用该工具检查过,并且定义了符号。我在新评论中附上了完整的代码。@Vivek:我下载了它并运行了“nmake-f makefile.nt”。我必须将user32.lib和gdi32.lib添加到makefile.nt中的LIBS语句中,然后将其干净地链接起来。我在VisualStudio2005、2008和2010中试用过。所以我猜你的路径设置不正确。您需要运行为命令行工具(例如vcvars32.bat)设置环境的批处理文件。这可能是因为它使用了错误的链接器或可能是错误的编译器。如果不使用这两个lib,它就不能以干净的构建方式构建。@Vivek:这对我来说有点困惑,但我很高兴你让它工作起来了。在编程中,这些类型的问题是最不有趣的。如果不使用这两个lib,它不是用干净的构建方式构建的。@Vivek:这对我来说有点困惑,但我很高兴你让它工作起来了。在编程中,这些类型的问题是最不有趣的。
    LINK /NOLOGO test.obj oauth.obj hash.obj oauth_http.obj xmalloc.obj    ws2_32.lib winmm.lib advapi32.lib  crypt32.lib user32.lib gdi32.lib   libeay32.lib ssleay32.lib
hash.obj : error LNK2019: unresolved external symbol HMAC referenced in function oauth_sign_hmac_sha1_raw
hash.obj : error LNK2019: unresolved external symbol EVP_sha1 referenced in function oauth_sign_hmac_sha1_raw
hash.obj : error LNK2019: unresolved external symbol EVP_PKEY_free referenced in function oauth_sign_rsa_sha1
hash.obj : error LNK2019: unresolved external symbol CRYPTO_free referenced in function oauth_sign_rsa_sha1
hash.obj : error LNK2019: unresolved external symbol EVP_SignFinal referenced in function oauth_sign_rsa_sha1
hash.obj : error LNK2019: unresolved external symbol EVP_DigestUpdate referenced in function oauth_sign_rsa_sha1
hash.obj : error LNK2019: unresolved external symbol EVP_DigestInit referenced in function oauth_sign_rsa_sha1
hash.obj : error LNK2019: unresolved external symbol EVP_PKEY_size referenced in function oauth_sign_rsa_sha1
hash.obj : error LNK2019: unresolved external symbol BIO_free referenced in function oauth_sign_rsa_sha1
hash.obj : error LNK2019: unresolved external symbol PEM_read_bio_PrivateKey referenced in function oauth_sign_rsa_sha1
hash.obj : error LNK2019: unresolved external symbol BIO_new_mem_buf referenced in function oauth_sign_rsa_sha1
hash.obj : error LNK2019: unresolved external symbol EVP_MD_CTX_cleanup referenced in function oauth_verify_rsa_sha1
hash.obj : error LNK2019: unresolved external symbol EVP_VerifyFinal referenced in function oauth_verify_rsa_sha1
hash.obj : error LNK2019: unresolved external symbol PEM_read_bio_PUBKEY referenced in function oauth_verify_rsa_sha1
hash.obj : error LNK2019: unresolved external symbol X509_free referenced in function oauth_verify_rsa_sha1
hash.obj : error LNK2019: unresolved external symbol X509_get_pubkey referenced in function oauth_verify_rsa_sha1
hash.obj : error LNK2019: unresolved external symbol PEM_read_bio_X509 referenced in function oauth_verify_rsa_sha1
hash.obj : error LNK2019: unresolved external symbol EVP_DigestFinal referenced in function oauth_body_hash_file
hash.obj : error LNK2019: unresolved external symbol EVP_MD_size referenced in function oauth_body_hash_file
hash.obj : error LNK2019: unresolved external symbol EVP_MD_CTX_init referenced in function oauth_body_hash_file
test.exe : fatal error LNK1120: 20 unresolved externals