【问题标题】:Building lib from source with visual studio or cmake使用 Visual Studio 或 cmake 从源代码构建库
【发布时间】:2016-08-14 23:06:35
【问题描述】:

我正在尝试构建usrsctp 库。使用 cmake 它构建并且不显示任何错误。使用 nmake 构建显示了这一点:

Microsoft (R) Program Maintenance Utility Version 11.00.60610.1
Copyright (C) Microsoft Corporation.  All rights reserved.

cl -DSCTP_DEBUG -DSCTP_SIMPLE_ALLOCATOR -DSCTP_PROCESS_LEVEL_LOCKS -D__Userspace__ -D__Userspace_os_Windows -DINET -DINET6 -D_LIB /I. /W3 /WX -c user_environment.c
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cl.EXE"' : return code '0xc0000135'
Stop.

在 cmake build 之后,我尝试使用 dll_export_viewer 查看其中的内容,发现它是空的。我的问题是如何正确构建库(.lib)和/或(.dll)?

更新 #1

CMake 输出:

D:\Desktop\usrsctp>cmake -G "Visual Studio 12 2013" D:\Downloads\usrsctp-0.9.3.0\usrsctplib
-- The C compiler identification is MSVC 18.0.40629.0
-- The CXX compiler identification is MSVC 18.0.40629.0
-- Check for working C compiler using: Visual Studio 12 2013
-- Check for working C compiler using: Visual Studio 12 2013 -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler using: Visual Studio 12 2013
-- Check for working CXX compiler using: Visual Studio 12 2013 -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of size_t
-- Check size of size_t - done
-- Check size of ssize_t
-- Check size of ssize_t - failed
-- Looking for sys/socket.h
-- Looking for sys/socket.h - not found
-- Looking for sys/queue.h
-- Looking for sys/queue.h - not found
-- Looking for linux/if_addr.h
-- Looking for linux/if_addr.h - not found
-- Looking for linux/rtnetlink.h
-- Looking for linux/rtnetlink.h - not found
-- Looking for netinet/ip_icmp.h
-- Looking for netinet/ip_icmp.h - not found
-- Looking for socket
-- Looking for socket - not found
-- Looking for inet_addr
-- Looking for inet_addr - not found
-- Performing Test HAVE_SA_LEN
-- Performing Test HAVE_SA_LEN - Failed
-- Performing Test HAVE_SIN_LEN
-- Performing Test HAVE_SIN_LEN - Failed
-- Performing Test HAVE_SIN6_LEN
-- Performing Test HAVE_SIN6_LEN - Failed
-- link library: ws2_32
-- Configuring done
-- Generating done
-- Build files have been written to: D:/Desktop/usrsctp

Cmake 构建输出: D:\Desktop\usrsctp>cmake --build 。 Microsoft (R) Build Engine 版本 12.0.40629.0 [Microsoft .NET 框架,版本 4.0.30319.42000] 版权所有 (C) 微软公司。保留所有权利。

Build started 2016-04-21 19:20:52.
Project "D:\Desktop\usrsctp\ALL_BUILD.vcxproj" on node 1 (default targets).
Project "D:\Desktop\usrsctp\ALL_BUILD.vcxproj" (1) is building             "D:\Desktop\usrsctp\ZERO_CHECK.vcxproj" (2) on node 1 (default targets).
PrepareForBuild:
....
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:29.86

使用 DLL Export Viewer 进行检查

【问题讨论】:

  • 为什么在标记 Visual Studio 2013 时使用 Visual Studio 2012?也许这是问题的一部分?
  • 你能说得更具体点吗?我的编程知识不深
  • 尝试通过cmake生成Visual Studio项目并在VS中构建:cmake -G "Visual Studio 12 2013" ./
  • 您的输出显示您正在使用“Visual Studio 2012”进行编译。但是,您将问题标记为“Visual Studio 2013”​​,您使用的是哪一个?
  • cmake -G "Visual Studio 11 2013" 应该是cmake -G "Visual Studio 12 2013"

标签: c++ visual-studio-2013 dll build


【解决方案1】:

这将非常依赖于您要构建的库。没有一种万能的解决方案。 查看您使用 NMAKE 所做的 usrsctp 手册是有道理的。 我能给你的只是关于你收到的错误的更多信息。

https://msdn.microsoft.com/en-us/library/dt309377.aspx

【讨论】:

    【解决方案2】:

    问题是我的系统的 PATH 变量已损坏,并且 nmake 正在从旧的 Visual Studio 版本运行,该版本已被删除(我不知道为什么没有 nmake)。修复后,构建成功,lib完全实现

    【讨论】:

    • 我发现最好从 Visual Studio 命令提示符运行 nmake / cmake-gui ... 以获取您要使用的编译器。这样,您的编译器将始终拥有正确的 PATH 和其他设置。虽然对我来说我安装了 4 或 5 个不同的 Visual Studio 编译器(工作 19 年 / 大量遗留代码)。
    猜你喜欢
    • 2021-03-17
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    相关资源
    最近更新 更多