使用 NuGet 包在 C++ 项目中引用 libssh2 会引发链接器错误
Referencing libssh2 in C++ project using NuGet package throws a linker error
我正在考虑将 libssh2 库用于我正在使用 C++ 进行的项目。在我在我的主应用程序中正确实施它之前,我已经创建了一个非常基本的项目来测试它。
我从 https://www.libssh2.org/examples/direct_tcpip.html 中获取了一个示例,并在 Visual Studio 2015 年使用 NuGet 包管理器安装了 libssh2 库。
我有以下代码
#include <libssh2.h>
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
const char *username = "user";
const char *password = "password";
const char *server_ip = "127.0.0.1";
const char *local_listenIP = "127.0.0.1";
unsigned int local_listenport = 2222;
const char *remote_desthost = "127.0.0.1";
unsigned int remote_destport = 22;
enum {
AUTH_NONE = 0,
AUTH_PASSWORD,
AUTH_PUBLICKEY
};
int main()
{
int rc, i, auth = AUTH_NONE;
struct sockaddr_in sin;
socklen_t sinlen;
const char *fingerprint;
char *userauthlist;
LIBSSH2_SESSION *session;
LIBSSH2_CHANNEL *channel = NULL;
const char *shost;
unsigned int sport;
fd_set fds;
struct timeval tv;
ssize_t len, wr;
char buf[16384];
char sockopt;
SOCKET sock = INVALID_SOCKET;
SOCKET listenSocket = INVALID_SOCKET, forward_socket = INVALID_SOCKET;
WSADATA wsadata;
int err;
err = WSAStartup(MAKEWORD(2, 0), &wsadata);
if (err != 0)
{
cout << "WSAStartup failed with error " << err << " Msg: " << strerror(err) << endl;
return EXIT_FAILURE;
}
rc = libssh2_init(0);
if (rc != 0)
{
cout << "Failed to init libssh2. Error " << rc << " Msg: " << strerror(err) << endl;
return EXIT_FAILURE;
}
编译时出现以下错误:
Unresolved external symbol libssh2_init referenced in function main
Unresolved external symbol _imp_WSAStartup referenced in function main
对于第一个错误,我同意harmic,您可以手动将.lib文件添加到您的项目中以解决库link失败:添加.lib文件:Properties>Linker->Input-> Additional Dependencies,添加.lib文件路径:Properties>Linker->General->Additional Dependencies.
对于第二个错误,问题是您没有link针对Ws2_32.lib 库。要解决此问题,您可以将以下代码添加到项目的源文件中。
#pragma comment(lib, "Ws2_32.lib")
我正在考虑将 libssh2 库用于我正在使用 C++ 进行的项目。在我在我的主应用程序中正确实施它之前,我已经创建了一个非常基本的项目来测试它。
我从 https://www.libssh2.org/examples/direct_tcpip.html 中获取了一个示例,并在 Visual Studio 2015 年使用 NuGet 包管理器安装了 libssh2 库。
我有以下代码
#include <libssh2.h>
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
const char *username = "user";
const char *password = "password";
const char *server_ip = "127.0.0.1";
const char *local_listenIP = "127.0.0.1";
unsigned int local_listenport = 2222;
const char *remote_desthost = "127.0.0.1";
unsigned int remote_destport = 22;
enum {
AUTH_NONE = 0,
AUTH_PASSWORD,
AUTH_PUBLICKEY
};
int main()
{
int rc, i, auth = AUTH_NONE;
struct sockaddr_in sin;
socklen_t sinlen;
const char *fingerprint;
char *userauthlist;
LIBSSH2_SESSION *session;
LIBSSH2_CHANNEL *channel = NULL;
const char *shost;
unsigned int sport;
fd_set fds;
struct timeval tv;
ssize_t len, wr;
char buf[16384];
char sockopt;
SOCKET sock = INVALID_SOCKET;
SOCKET listenSocket = INVALID_SOCKET, forward_socket = INVALID_SOCKET;
WSADATA wsadata;
int err;
err = WSAStartup(MAKEWORD(2, 0), &wsadata);
if (err != 0)
{
cout << "WSAStartup failed with error " << err << " Msg: " << strerror(err) << endl;
return EXIT_FAILURE;
}
rc = libssh2_init(0);
if (rc != 0)
{
cout << "Failed to init libssh2. Error " << rc << " Msg: " << strerror(err) << endl;
return EXIT_FAILURE;
}
编译时出现以下错误:
Unresolved external symbol libssh2_init referenced in function main
Unresolved external symbol _imp_WSAStartup referenced in function main
对于第一个错误,我同意harmic,您可以手动将.lib文件添加到您的项目中以解决库link失败:添加.lib文件:Properties>Linker->Input-> Additional Dependencies,添加.lib文件路径:Properties>Linker->General->Additional Dependencies.
对于第二个错误,问题是您没有link针对Ws2_32.lib 库。要解决此问题,您可以将以下代码添加到项目的源文件中。
#pragma comment(lib, "Ws2_32.lib")