我正在尝试在Windows 8.1 x64上构建libCurl x64,并且出现链接器错误。我需要能够执行此操作,因为我需要创建该库的64位调试版本,以便可以跟踪遇到的一些与FTP相关的奇怪协议问题。
基本误差输出(为简洁起见)如下
1> ------构建开始:项目:ZERO_CHECK,配置:调试x64
...
2> C:\ Users \ jcoffey \ main \ extlibs \ curl-7.35.0 \ lib \ smtp.c(2174):警告C4267:'+ =':从'size_t'转换为'long',可能丢失数据2> pingpong.c 2> rtsp.c 2> curl_threads.c 2> warnless.c 2> hmac.c 2> curl_rtmp.c 2> openldap.c 2> curl_gethostname.c 2> gopher.c 2>生成代码。 .. 2>编译... 2> idn_win32.c 2> http_negotiate_sspi.c 2> http_proxy.c 2> non-ascii.c 2> asyn-ares.c 2> asyn-thread.c 2> curl_gssapi.c 2 > curl_ntlm.c 2> curl_ntlm_wb.c 2> curl_ntlm_core.c 2> curl_ntlm_msgs.c 2> curl_sasl.c 2> curl_multibyte.c 2> hostcheck.c 2> bundles.c 2> conncache.c 2> pipeline.c 2 > dotdot.c 2> x509asn1.c 2> http2.c 2>生成代码... 2>编译... 2> openssl.c 2> gtls.c 2> vtls.c 2> nss.c 2> qssl 。c 2> polarssl.c 2> polarssl_threadlock.c 2> axtls.c 2> cyassl.c 2> curl_schannel.c 2> curl_darwinssl.c 2> gskit.c 2>正在生成代码...
...
2> x64 \ Debug \ file.obj:致命错误LNK1112:模块计算机类型'x64'与目标计算机类型'X86'冲突3> ------构建开始:项目:curl,配置:调试x64 --- --- 3>构建自定义规则C:/Users/jcoffey/main/extlibs/curl-7.35.0/src/CMakeLists.txt
请帮忙-我在论坛和stackoverflow上搜索了类似内容,但无济于事。我能够在x86(win32)模式下成功构建,但是在定位x64时出现链接错误。
第1步:下载最新的CMake 2.8.12.2并更新Windows PATH环境(在我的情况下,我使用的是MINMGW32 bash shell提示,但是如果我使用本机visual studio 2013 x64 shell运行cmake,则会遇到完全相同的链接问题。 )
$ export PATH = $ PATH:/ c / Program \ Files \(x86)/ CMake \ 2.8 / bin
验证Windows上Cmake的路径和版本
$ cmake --version cmake版本2.8.12.2
步骤2:将curl-7.35.0解压缩到文件夹c:\ temp \ curl-7.35.0“中,并创建一个并行文件夹” c:\ temp \ curl-7.35.0 \ build“。
步骤3:切换到build文件夹,并运行目标为“ Visual Studio 12”的Cmake作为所需的Visual Studio解决方案/项目组合
$ cmake -G“ Visual Studio 12” ../curl-7.35.0
这会产生大量的输出,如下所示,但是它的确也创建了针对X86型机器的可行的Visual Studio解决方案。
$ cmake -G“ Visual Studio 12” ../curl-7.35.0-C编译器标识为MSVC 18.0.21005.1-使用以下工具检查工作的C编译器:Visual Studio 12-使用以下工具检查工作的C编译器:Visual Studio 12-起作用-检测C编译器ABI信息-检测C编译器ABI信息-完成CMake在CMakeLists.txt:47发出警告(消息):curl cmake构建系统维护不善。意识到
-curl版本= [7.35.0]-在ws2_32中寻找getch;-在ws2_32中寻找getch;-找到-在winmm; ws2_32中寻找getch-在winmm; ws2_32中寻找getch-在wldap32中寻找cldap_open-在wldap32中寻找cldap_open-找到-在idn中寻找idna_to_ascii_lz; winmm; ws2_32- -在idn; winmm; ws2_32中寻找idna_to_ascii_lz-找不到-在ldap; winmm; ws2_32中寻找ldap_init-在ldap; winmm; ws2_32中寻找ldap_init-找不到-找不到OpenSSL,尝试设置路径到系统变量OPENSSL_ROOT_DIR中的OpenSSL根文件夹(丢失:OPENSSL_LIBRARIES OPENSSL_INCLUDE_DIR)
-寻找包含文件ws2tcpip.h-寻找包含文件ws2tcpip.h-找到-寻找包含文件ws2tcpip.h,winsock2.h-寻找包含文件ws2tcpip.h,winsock2.h-找到-寻找3个包含文件ws2tcpip.h,...,stdio.h-寻找3个包含文件ws2tcpip.h,...,stdio.h-找到-寻找4个包含文件ws2tcpip.h,...,stdio.h ,windows.h-寻找4个包含文件ws2tcpip.h,...,windows.h-找到-寻找5个包含文件ws2tcpip.h,...,winsock.h-寻找5个包含文件ws2tcpip .h,...,winsock.h-找到-寻找6个包含文件ws2tcpip.h,...,sys / filio.h-寻找6个包含文件ws2tcpip.h,...,sys / filio .h-找不到-寻找6个包含文件ws2tcpip.h,...,sys / ioctl.h-寻找6个包含文件ws2tcpip.h,...,sys / ioctl。h-找不到-查找6个包含文件ws2tcpip.h,...,sys / resource.h-寻找6个包含文件ws2tcpip.h,...,sys / resource.h-找不到-查找对于8个包含文件ws2tcpip.h,...,sys / uio.h-寻找8个包含文件ws2tcpip.h,...,sys / uio.h-未找到-寻找8个包含文件ws2tcpip.h ,...,sys / un.h-寻找8个包含文件ws2tcpip.h,...,sys / un.h-找不到-寻找9个包含文件ws2tcpip.h,...,arpa / tftp.h-寻找9个包含文件ws2tcpip.h,...,arpa / tftp.h-找不到-寻找9个包含文件ws2tcpip.h,...,assert.h-寻找9个包含文件文件ws2tcpip.h,...,assert.h-找到-寻找10个包含文件ws2tcpip.h,...,crypto.h-寻找10个包含文件ws2tcpip.h,...,crypto.h -找不到-寻找10个包含文件ws2tcpip.h,...,des。h-寻找10个包含文件ws2tcpip.h,...,des.h-未找到-寻找10个包含文件ws2tcpip.h,...,err.h-寻找10个包含文件ws2tcpip.h ,...,err.h-未找到-寻找10个包含文件ws2tcpip.h,...,errno.h-寻找10个包含文件ws2tcpip.h,...,errno.h-找到- -寻找12个包含文件ws2tcpip.h,...,gssapi / gssapi.h-寻找12个包含文件ws2tcpip.h,...,gssapi / gssapi.h-未找到-寻找12个包含文件ws2tcpip .h,...,gssapi / gssapi_generic.h-寻找12个包含文件ws2tcpip.h,...,gssapi / gssapi_generic.h-不寻找-寻找12个包含文件ws2tcpip.h,... ,gssapi / gssapi_krb5.h-寻找12个包含文件ws2tcpip.h,...,gssapi / gssapi_krb5.h-不存在d-寻找12个包含文件ws2tcpip.h,...,无idn。h-寻找12个包含文件ws2tcpip.h,...,idn-free.h-找不到-寻找12个包含文件ws2tcpip.h,...,ifaddrs.h-寻找12个包含文件ws2tcpip .h,...,ifaddrs.h-找不到-寻找13个包含文件ws2tcpip.h,...,krb.h-寻找13个包含文件ws2tcpip.h,...,krb.h-找不到-寻找13个包含文件ws2tcpip.h,...,libgen.h-寻找13个包含文件ws2tcpip.h,...,libgen.h-找不到-寻找13个包含文件ws2tcpip。 h,...,libssh2.h-寻找13个包含文件ws2tcpip.h,...,libssh2.h-找不到-寻找13个包含文件ws2tcpip.h,...,limits.h-寻找13个包含文件ws2tcpip.h,...,limits.h-找到-寻找14个包含文件ws2tcpip.h,...,locale.h-寻找14个包含文件ws2tcpip.h,... ,语言环境。h-找到-寻找15个包含文件ws2tcpip.h,...,netinet / tcp.h-寻找15个包含文件ws2tcpip.h,...,netinet / tcp.h-找不到-寻找15个包含文件ws2tcpip.h,...,pem.h-寻找15个包含文件ws2tcpip.h,...,pem.h-未找到-寻找15个包含文件ws2tcpip.h,..., poll.h-寻找15个包含文件ws2tcpip.h,...,poll.h-未找到-寻找15个包含文件ws2tcpip.h,...,rsa.h-寻找15个包含文件ws2tcpip。 .h,...,rsa.h-找不到-寻找17个包含文件ws2tcpip.h,...,ssl.h-寻找17个包含文件ws2tcpip.h,...,ssl.h-找不到-寻找17个包含文件ws2tcpip.h,...,stdbool.h-寻找17个包含文件ws2tcpip.h,...,stdbool.h-找到-寻找21个包含文件ws2tcpip.h ,...,h-寻找21个包含文件ws2tcpip.h,...,stropts.h-找不到-寻找22个包含文件ws2tcpip.h,...,tld.h-寻找22个包含文件ws2tcpip.h ,...,tld.h-找不到-寻找23个包含文件ws2tcpip.h,...,stddef.h-寻找23个包含ws2tcpip.h,...,stddef.h文件-找到- -寻找26个包含文件ws2tcpip.h,...,ldap.h-寻找26个包含文件ws2tcpip.h,...,ldap.h-找不到-寻找26个包含文件ws2tcpip.h,。 ..,sys / utsname.h-寻找26个包含文件ws2tcpip.h,...,sys / utsname.h-未找到-寻找26个包含文件ws2tcpip.h,...,idna.h- -寻找26个包含文件ws2tcpip.h,...,idna。h-找不到-找不到LDAP_H CURL_DISABLE_LDAP设置为ON-需要启用LDAP以支持LDAPS-检查size_t的大小-检查size_t的大小-完成-检查ssize_t的大小-检查ssize_t的大小-失败-检查long long的大小-检查long long的大小-检查long的大小-检查long的大小-检查short的大小-检查short的大小-检查int的大小-检查int的大小-完成-检查__int64的大小-检查__int64的大小-完成-检查time_t的大小-检查time_t的大小-完成-寻找基本名-寻找基本名-未找到- -寻找strncmpi-寻找strncmpi-未找到-寻找警报-寻找警报-未找到-寻找CRYPTO_cleanup_all_ex_data-寻找CRYPTO_cleanup_all_ex_data-未找到-寻找gethostbyname-寻找gethostbyname-找到-寻找strtoll-寻找strtoll-找到-寻找_strtoi64-寻找_strtoi64-找到-寻找strerror_r-寻找strerror_r-未找到-寻找siginterrupt-寻找siginterrupt -找不到-寻找叉子-寻找叉子-没找到-寻找freeaddrinfo-寻找freeaddrinfo-找到-寻找freeifaddrs-寻找freeifaddrs-找不到-寻找烟斗-寻找管道-找不到-寻找ftruncate-寻找ftruncate-找不到-寻找getprotobyname-寻找getprotobybyname-找到-寻找getrlimit-寻找getrlimit-找不到-寻找idn_free-寻找for idn_free-找不到-寻找idna_strerror-寻找idna_strerror-找不到-寻找tld_strerror-寻找tld_strerror-找不到-寻找setlocale-寻找setlocale-找到-寻找setrlimit-寻找setrlimit-找不到-寻找fcntl-寻找fcntl-找不到-寻找ioctl- -寻找ioctl-找不到-寻找setsockopt-寻找setsockopt-找到-寻找inet_pton-寻找inet_pton-找不到-执行卷曲测试HAVE_FCNTL_O_NONBLOCK-执行卷曲测试HAVE_FCNTL_O_NONBLOCK-失败-执行卷曲测试HAVE_IOCTLSOCKET-执行卷曲测试HAVE_IOCTLSOCKET-成功-执行卷曲测试HAVE_IOCTLSOCKET_CAMEL-执行卷曲测试HAVE_IOCTLSOCKET_CAMEL-失败-执行卷曲测试HAVE_IOCTLSOCKET_CAMEL_FIONBIOKIO-执行Curl测试HAVE_IOCTLSOCKET_CAMION_IOC进行卷曲测试HAVE_IOCTLSOCKET_FIONBIO-成功-进行卷曲测试HAVE_IOCTL_FIONBIO-进行卷曲测试HAVE_IOCTL_FIONBIO-失败-进行卷曲测试HAVE_IOCTL_SIOCGIFADDR-进行卷曲测试HAVE_LOCK_LOCK_SET_SET --SET -SET进行卷曲测试HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID-进行卷曲测试HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID-失败-进行卷曲测试HAVE_SOCKLEN_T-进行卷曲测试HAVE_SOCKLEN_T-成功-进行卷曲测试HAVE_BOOL_T--进行卷曲测试HAVE_BOOL_T-测试HAVE_FILE_OFFSET_BITS-失败-执行卷曲测试HAVE_GLIBC_STRERROR_R-执行卷曲测试HAVE_GLIBC_STRERROR_R-失败-执行卷曲测试HAVE_POSIX_STRERROR_R-执行卷曲测试HAVE_POSIX_STRERROR_R-失败-检查curl_off_t的大小-检查curl_off_t的大小-失败-检查socklen_t的大小-检查socklen_t的大小-完成-执行测试curl_cv_recv-执行测试curl_cv_recv-成功-执行测试int recv(int,void *,size_t,int)(curl_cv_func_recv_test)-执行测试int recv(int,void *,size_t,int)(curl_cv_func_recv_test)-成功-执行测试curl_cv_s -执行测试curl_cv_send-成功-执行测试int send(int,const void *,size_t,int)(curl_cv_func_send_t est)-执行测试int send(int,const void *,size_t,int)(curl_cv_func_send_t est)-成功-执行测试HAVE_MSG_NOSIGNAL-执行测试HAVE_MSG_NOSIGNAL-失败-执行测试HAVE_STRUCT_TIMEVAL-执行测试HAVE_STRUCT_TIMEVAL-成功-执行测试HAVE_POLL_FINE-完成-执行测试-检查sig_atomic_t的大小-完成-执行测试HAVE_SIG_ATOMIC_T_NOT_VOLATILE-执行测试HAVE_SIG_ATOMIC_T_NOT_VOLATILE-成功-检查struct sockaddr_storage的大小-检查struct sockaddr_storage的大小-CMake错误(列表)测试中的CMake警告(列表):测试失败。 add_subdirectory):源目录源目录源目录
C:/Users/jcoffey/main/extlibs/curl-7.35.0/tests/libtest
不包含CMakeLists.txt文件。
CMake不支持这种情况,但是它曾经偶然地工作,并且被允许兼容。
未设置策略CMP0014:输入目录必须具有CMakeLists.txt。运行“ cmake --help-policy CMP0014”以获取策略详细信息。使用cmake_policy命令设置策略并禁止显示此警告。此警告是针对项目开发人员的。使用-Wno-dev禁止它。
tests / CMakeLists.txt:2(add_subdirectory)上的CMake警告(dev):
源目录C:/Users/jcoffey/main/extlibs/curl-7.35.0/tests/server
不包含CMakeLists.txt文件。
CMake不支持这种情况,但是它曾经偶然地工作,并且被允许兼容。
未设置策略CMP0014:输入目录必须具有CMakeLists.txt。运行“ cmake --help-policy CMP0014”以获取策略详细信息。使用cmake_policy命令设置策略并禁止显示此警告。此警告是针对项目开发人员的。使用-Wno-dev禁止它。
-配置完成-生成完成-构建文件已写入:C:/Users/jcoffey/main/extlibs/curl-7.35.0-build
步骤4:在Visual Studio中,使用配置管理器将目标类型更改为x64(我必须在其中选择一个新平台,然后选择X64并从Win32复制设置)。这是用于定位X64计算机目标的非常简单的步骤,为避免混淆,我在此处未包含逐步的详细信息。
步骤5选择解决方案,然后从Visual Studio 2013重新构建所有内容,随后将出现上述输出。
旁注:尽管我现在真的不需要SSL,但是很高兴知道如何告诉CMake LIBSSL内容的位置(我下载了一个预构建的程序包(32位和64位,包括SSL和其他库)来自http://www.confusedbycode.com/curl/,但是这些都是发布模式,我需要能够调试libCurl来了解正在遇到的一些奇怪问题。对于配置CMake的新手来说,它对于那些针对多个平台但更喜欢在Windows上开发的人来说似乎是一个非常有前途的工具,它肯定比gnu autotools容易。
看起来CMake生成的解决方案文件不希望X64成为潜在目标。我发现这里的问题略有不同。
这是X64命令行选项的图片-正如我将配置管理器更改为使用X64之后所看到的
进行了这些更改之后,项目最终得以链接,并且我能够生成该库的调试版本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句