- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 MSVC 中遇到了我为 g++ 编写的项目的链接问题。问题是这样的:
我将 libssh 构建为静态库,作为我的应用程序的一部分,并在 cmake 中添加目标
add_library(ssh_static STATIC $libssh_SRCS)
Libssh 是用 C 语言编写的,因此我使用“extern "C"{...}”将包含内容包装在我的 C++ 源代码中。然后,我使用
将 ssh_static 目标链接到我的可执行文件 sshconnectiontesttarget_link_libraries(sshconnectiontest ... ssh_static ...)
这一切在带有 gcc 的 linux 中工作得很好,但现在在 MSVC 中我得到了
error LNK2019: unresolved external symbol __imp__[function names here] referenced in [filename]
对于我使用的每个 libssh 函数。
有什么想法出了什么问题吗?我在某处读到 imp 前缀意味着链接器期望链接 .dll,但情况不应如此,因为 ssh_static 在 add_library 调用中被声明为静态库...
最佳答案
根据我对 Windows 时代的内存,在 MinGW 构建的 DLL 中,__imp__
符号前缀用于调用 DLL 的 Trampoline 函数。然后,该符号由扩展名为 .dll.a
的小型静态库提供。 .
当您包含 libssh header 时,您需要设置 #define
表明您希望静态链接。如果不这样做, header 中的 libssh 函数将被声明为 __declspec(dllimport)
所以__imp__
链接时将出现符号。
我查看了 libssh 源代码,并在 libssh.h
的顶部找到了它:
#ifdef LIBSSH_STATIC
#define LIBSSH_API
#else
#if defined _WIN32 || defined __CYGWIN__
#ifdef LIBSSH_EXPORTS
#ifdef __GNUC__
#define LIBSSH_API __attribute__((dllexport))
#else
#define LIBSSH_API __declspec(dllexport)
#endif
#else
#ifdef __GNUC__
#define LIBSSH_API __attribute__((dllimport))
#else
#define LIBSSH_API __declspec(dllimport)
#endif
#endif
#else
#if __GNUC__ >= 4
#define LIBSSH_API __attribute__((visibility("default")))
#else
#define LIBSSH_API
#endif
#endif
#endif
您需要定义LIBSSH_STATIC
,或者通过 #define
之前#include <libssh.h>
线,或作为 /D
选项。由于您使用的是 CMake,因此您可能会通过 add_definitions
来执行此操作在CMakeLists.txt
.
关于visual-c++ - MSVC 中的链接错误 LNK2019,带有 __imp__ 前缀的未解析符号,但应该来自静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3704374/
我正在使用 libcurl,但在 VC++ 10 中出现以下类型的链接器错误。 1>main.obj : error LNK2019: unresolved external symbol __imp
我不确定出了什么问题。我将描述问题,然后是我对发生的事情的理解。这是一个简单的代码: #include #include #include "stdafx.h" #include int mai
我在 MSVC 中遇到了我为 g++ 编写的项目的链接问题。问题是这样的: 我将 libssh 构建为静态库,作为我的应用程序的一部分,并在 cmake 中添加目标 add_library(ssh_s
我正在使用 MS Visual C++ 2010 Express 构建一个插件,我想包含来自 HDF5 library 的功能.我尝试过使用 CMake 从源代码构建 HDF5,并安装预编译库(HDF
我是一名优秀的程序员,十分优秀!