2016-12-22 5 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