2016-12-22 1 views
0

에 링크해야합니다. libevent를 다운로드하여 사용자 정의 폴더에 컴파일했지만 시스템 전체에 libevent가 설치되어 있습니다. 그러나 나는 내가 편집 한 것에 링크하고 싶다.비 시스템 설치 라이브러리

내 프로그램은 다음과 같습니다

#include <iostream> 

#include <string.h> 
#include <errno.h> 
#include <stdio.h> 
#include <signal.h> 

#include <event2/bufferevent.h> 
#include <event2/buffer.h> 
#include <event2/listener.h> 
#include <event2/util.h> 
#include <event2/event.h> 
#include <event2/frob.h> 

int main() 
{ 
    struct event_base *base; 
    struct evconnlistener *listener; 
    struct event *signal_event; 

    base = event_base_new(); 

    std::cout << "Finished getting new event base" << std::endl; 

    return 0; 
} 

그런 다음, libevent의 다운로드 버전, 내가 다시 모두 컴파일의 event_base_new() 기능에 exit(-1)를 삽입처럼, 내 프로그램 및 libevent을 일부 수정 한과를 실행 실행 파일. 그러나 프로그램이 종료되지 않고 실행되었습니다.

clang++ -I/Users/max/Downloads/libevent-2.0.22-stable/include -Wall -g -c server.cpp 
clang++ -Wall -g server.o -L/Users/max/Downloads/libevent-2.0.22-stable/ -levent -o server 

그 libevent 내 다른 버전을 사용하는 링커를 말할 충분하지 않나요 : 여기

내가 컴파일 어떻게?

+0

, 오히려이 경로는 평가 포함하기 전에 시스템 설치 libs와 검색되도록, 일 -I –

답변

0

(libevent_customized.a에, 말) 라이브러리 파일 이름을 바꾸고 링커에 이름이 라이브러리의 이름을 제공 : 또는

clang++ -Wall -g server.o -L/path/to/lib -levent_customized -o server 
#          ^^^^^^^^^^^^^^^^^^ 

을, 당신은 (일반 인수로 전체 경로를 사용하여이 뜻을 라이브러리 파일을 지정할 수 있습니다 만 해당) 정적 라이브러리 작동 :

clang++ -Wall -g server.o /path/to/lib/libevent.a -o server 
+0

감사보다 -isystem 사용 연타에 경로를 포함하는 시스템을 지정? 나는 솔직히 모르겠다. – Max

+0

명령 줄에 지정된 디렉터리는 기본 디렉터리 전에 검색된다. 그러나 ELF 시스템에서 링커는 정적 버전을 시도하기 전에 동적 버전의 라이브러리를 검색합니다. 시스템 라이브러리는 정적 라이브러리 ('libevent.a')로 빌드 한 동안 동적 라이브러리 ('libevent.so') 였을 것입니다. – Leon