2016-12-11 11 views
0

C++에서 작업중인 프로젝트에 libssh2 라이브러리를 사용하고 있습니다. 내 기본 응용 프로그램에서 제대로 구현하기 전에 테스트 할 수있는 매우 기본적인 프로젝트를 만들었습니다.NuGet 패키지를 사용하는 C++ 프로젝트에서 libssh2를 참조하면 링커 오류가 발생합니다.

나는 https://www.libssh2.org/examples/direct_tcpip.html에서 예를 촬영하고 난 비주얼 스튜디오에서 NuGet 패키지 관리자를 사용하여 libssh2 라이브러리를 설치 한 2015 년

나는 다음과 같은 코드가 내가 얻을 컴파일

#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 

도움을 주셔서 감사합니다.

+0

아마도 libssh2 또는 winsock에 연결하지 않았을 것입니다. – harmic

답변

0

첫 번째 오류의 경우, 나는 harmic에 동의합니다. 프로젝트에 .lib 파일을 수동으로 추가하여 라이브러리 링크 실패를 해결할 수 있습니다. .lib 파일 추가 : Properties> Linker-> Input-> Additional Dependencies .lib 파일 경로 : Properties> Linker-> General-> Additional Dependencies.

두 번째 오류의 경우 Ws2_32.lib 라이브러리에 연결하지 않는 것이 문제입니다. 이 문제를 해결하려면 다음 코드를 프로젝트의 소스 파일에 추가하면됩니다.

#pragma comment(lib, "Ws2_32.lib") 
+0

NuGet 패키지 관리자가 설치를 완료했을 때 lib가 링커에 자동으로 추가 될 것으로 예상 했음에도 불구하고 pragma가 필요하다는 점을 잊어 버렸습니다. – Boardy