首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误LNK2019:编译HTTPD时引用的未解析外部符号

问错误LNK2019:编译HTTPD时引用的未解析外部符号
EN

Stack Overflow用户
提问于 2021-06-12 01:32:45
回答 1查看 263关注 0票数 0

我正在编译HTTPD 2.4.48以及Lua、Zlib、cURL、jansson和OpenSSL。

下面是我使用的文件和软件列表:

  1. httpd-2.4.48
  2. apr-1.7.0
  3. apr-util-1.6.1
  4. cURL 7.77.0
  5. expat-2.4.1
  6. jansson 2.13.1
  7. Lua 5.4.3
  8. mod_fcgid 2.3.9
  9. openssl-1.1.1k
  10. pcre-8.44
  11. ZLIB 1.2.11
  12. ActivePerl v5.28.1.2801 (( x64)
  13. CMake v3.20.3 (x64)
  14. NASM v2.15.05 (x64)
  15. Gawk v3.1.6-1 (x86)

我使用的全部编译语句如下:

Visual 2015:调用"C:\Program (x86)\Microsoft 14.0\VC\vcvarsall.bat“amd64

代码语言:javascript
复制
*****************
** ZLIB Build **
*****************

cd /D C:\httpd\srclib\zlib\bin
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=\phpStudy\Apache -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON ..
nmake
nmake install

****************
** Pcre Build **
****************
cd /D C:\httpd\srclib\pcre\bin
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=\phpStudy\Apache -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DPCRE_BUILD_TESTS=OFF -DPCRE_BUILD_PCRECPP=OFF -DPCRE_BUILD_PCREGREP=OFF -DPCRE_SUPPORT_PCREGREP_JIT=OFF -DPCRE_SUPPORT_UTF=ON -DPCRE_SUPPORT_UNICODE_PROPERTIES=ON -DPCRE_NEWLINE=CRLF -DINSTALL_MSVC_PDB=OFF ..
nmake
nmake install

*****************
** Expat Build **
*****************
cd /D C:\httpd\srclib\expat\bin
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=\phpStudy\Apache -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON ..
nmake
nmake install

*******************
** OpenSSL Build **
*******************
cd /D C:\httpd\srclib\openssl
perl Configure VC-WIN64A --release --prefix=\phpStudy\Apache --openssldir=\phpStudy\Apache\conf enable-camellia no-idea no-mdc2 no-ssl2 no-ssl3
nmake
nmake install

***************
** Lua Build **
***************

cd /D C:\httpd\srclib\lua\bin
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=\phpStudy\Apache -DCMAKE_BUILD_TYPE=Release ..
nmake
nmake install

****************
** cURL Build **
****************

cd /D C:\httpd\srclib\curl\bin
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=\phpStudy\Apache -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON ..
nmake
nmake install

*******************
** jansson Build **
*******************

cd /D C:\httpd\srclib\jansson\bin
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=\phpStudy\Apache -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON ..
nmake
nmake install

***************
** APR Build **
***************
cd /D C:\httpd\srclib\apr\bin
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=\phpStudy\Apache -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DMIN_WINDOWS_VER=0x0600 -DAPR_HAVE_IPV6=ON -DAPR_INSTALL_PRIVATE_H=ON -DAPR_BUILD_TESTAPR=OFF -DINSTALL_PDB=OFF ..
nmake
nmake install

********************
** APR-Util Build **
********************
cd /D C:\httpd\srclib\apr-util\bin
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=\phpStudy\Apache -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DOPENSSL_ROOT_DIR=\phpStudy\Apache  -DAPU_HAVE_CRYPTO=ON -DAPR_BUILD_TESTAPR=OFF -DINSTALL_PDB=OFF ..
nmake
nmake install

******************
** Apache Build **
******************
cd /D C:\httpd\bin
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=\phpStudy\Apache -DCMAKE_BUILD_TYPE=Release -DENABLE_MODULES=i -DINSTALL_PDB=OFF ..
nmake
nmake install

但是,在编译HTTPD的最后一步中,得到了以下错误:

代码语言:javascript
复制
[ 44%] Linking C shared library mod_md.so
LINK: command "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\link.exe /nologo @CMakeFiles\mod_md.dir\objects1.rsp /out:mod_md.so /implib:mod_md.lib /pdb:C:\httpd\bin\mod_md.pdb /dll /version:0.0 /base:@C:/httpd/bin/BaseAddr.ref,mod_md.so /machine:x64 /INCREMENTAL:NO \phpStudy\Apache\lib\libssl.lib \phpStudy\Apache\lib\libcrypto.lib \phpStudy\Apache\lib\jansson.lib mod_watchdog.lib libhttpd.lib \phpStudy\Apache\lib\libapr-1.lib \phpStudy\Apache\lib\libaprutil-1.lib \phpStudy\Apache\lib\apr_ldap-1.lib ws2_32.lib mswsock.lib \phpStudy\Apache\lib\pcre.lib ws2_32.lib mswsock.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:mod_md.so.manifest" failed (exit code 1120) with the following output:
   Creating library mod_md.lib and object mod_md.exp
md_curl.c.obj : error LNK2019: unresolved external symbol curl_global_init referenced in function md_curl_init
md_curl.c.obj : error LNK2019: unresolved external symbol curl_slist_append referenced in function curlify_headers
md_curl.c.obj : error LNK2019: unresolved external symbol curl_slist_free_all referenced in function md_curl_req_cleanup
md_curl.c.obj : error LNK2019: unresolved external symbol curl_easy_strerror referenced in function md_curl_perform
md_curl.c.obj : error LNK2019: unresolved external symbol curl_easy_init referenced in function internals_setup
md_curl.c.obj : error LNK2019: unresolved external symbol curl_easy_setopt referenced in function internals_setup
md_curl.c.obj : error LNK2019: unresolved external symbol curl_easy_perform referenced in function md_curl_perform
md_curl.c.obj : error LNK2019: unresolved external symbol curl_easy_cleanup referenced in function md_curl_req_cleanup
md_curl.c.obj : error LNK2019: unresolved external symbol curl_easy_getinfo referenced in function md_curl_perform
md_curl.c.obj : error LNK2019: unresolved external symbol curl_multi_init referenced in function md_curl_multi_perform
md_curl.c.obj : error LNK2019: unresolved external symbol curl_multi_add_handlereferenced in function md_curl_multi_perform
md_curl.c.obj : error LNK2019: unresolved external symbol curl_multi_remove_handle referenced in function md_curl_multi_perform
md_curl.c.obj : error LNK2019: unresolved external symbol curl_multi_wait referenced in function md_curl_multi_perform
md_curl.c.obj : error LNK2019: unresolved external symbol curl_multi_perform referenced in function md_curl_multi_perform
md_curl.c.obj : error LNK2019: unresolved external symbol curl_multi_cleanup referenced in function md_curl_multi_perform
md_curl.c.obj : error LNK2019: unresolved external symbol curl_multi_info_read referenced in function md_curl_multi_perform
md_curl.c.obj : error LNK2019: unresolved external symbol curl_multi_strerror referenced in function md_curl_multi_perform
mod_md.so : fatal error LNK1120: 17 unresolved externals
NMAKE : fatal error U1077: '"C:\Program Files\CMake\bin\cmake.exe"' : return code '0xffffffff'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\amd64\nmake.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\amd64\nmake.exe"' : return code '0x2'
Stop.

我找到了这个问题的答案:Visual Studio 2015 curl will not statically link

将md_curl.c文件的代码更改为:

代码语言:javascript
复制
#pragma comment(lib, "wldap32.lib" )
#pragma comment(lib, "crypt32.lib" )
#pragma comment(lib, "Ws2_32.lib")

#define CURL_STATICLIB
#include <curl/curl.h>

但是这个错误仍然会发生。

我哪里出错了?我感到困惑,因为这是我第一次在编译HTTPD时遇到这个错误。

你的回答会很有帮助。我会很感激的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-12 02:15:28

无论何时修复问题,从第一个问题开始(原因解决可能会消除剩余的问题),在您的情况下,这似乎是:

代码语言:javascript
复制
error LNK2019: unresolved external symbol curl_global_init referenced in function md_curl_init

它基本上告诉我们,md_curl_init方法调用curl_global_init方法,但是尽管编译时声明是可用的,但是缺少链接器时所需的定义。

无论如何,要修复这个问题,确保curl作为一个库添加,我的意思是,目前没有在您的链接器命令行(至少不是在您发布的内容中)。

编辑我将向您建议您的方法,以了解如何做到这一点。

但首先,给它更多的时间,我看到:

是的,您已经编译了curl.

  • Your“完整的编译语句”,即使用C:\httpd\srclib\curl\bin作为cURL.

  • Also,的构建目录,您应该能够在C:\httpd\srclib\curl\bin目录(用作build-directory).

)中找到curl.lib。

方法1:

创建根CMakeFiles.txt文件并使用add_subdirectory(...)方法添加其他项目。

我推荐automatically. ,因为CMake将为您处理查找curl curl的任务。

我是说,你只需要做这样的事:

代码语言:javascript
复制
target_link_libraries(myTargetThatNeedsCurl
    curl
)

方法2:

如果您不想更改“完整的编译语句”,那么您唯一的选择可能是将curl.lib放在其他构建脚本可以找到的地方(手动或通过一些自定义的install(...)方法调用,这就留给您了)。

方法3:

  1. 优先,编辑httpd项目( C:\httpd\CMakeFiles.txt文件),并在开头添加add_subdirectory(srclib/curl)。

然后,

  1. 查找cURL目标的名称,例如,打开C:\httpd\srclib\curl\CMakeFiles.txt文件并查看所有add_library(...)调用的第一个参数(其中一个是我们想要的)。

  1. 最后,再次编辑httpd项目,但现在将步骤2中找到的内容作为参数添加到target_link_libraries(...)方法.

中。

Note方法#3与#2相同,但只适用于cURL (而不是添加所有子目录).

。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67944929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档