2011-09-05 34 views
1

我創建了一個名爲car.so的.so文件。我想在test.cc代碼中測試和使用這個庫。在我想編譯的命令行中:g ++ test.cc -o test。我不想也鏈接(包括)庫car.so.如何使用.so文件而不在命令行運行g ++

如何做到這一點?

我test.cc代碼如下所示:

void* handle = dlopen("/home/v3/car.so", RTLD_LAZY); 

    Car* (*create)(); 
    void (*destroy)(Car*); 

    create = (Car* (*)())dlsym(handle, "create_object"); 
    destroy = (void (*)(Car*))dlsym(handle, "destroy_object"); 

    Car* carr = (Car*)create(); 
    carr->brake(); 
    destroy(carr); 

我還想問一下,如果有可能,包括3 .so文件在一個單一的.so文件。

編輯:

我工作在Ubuntu/Linux的一般

+0

看一看動態鏈接。這與操作系統有關,但我假設你使用某種Linux。在那裏,看看dlsym和相關函數。 – arne

+0

是的。我正在工作OB UUNTU。按照與操作系統相關的內容,您有何看法?是否可能或不能用G ++運行一個包含圖書館但不包括圖書館在內的編譯命令的C文件? – sunset

+4

男人,你的大寫鎖定 –

回答

2

你應該包括你的.so庫的.h文件中在(申請)/ test.cc然後編譯test.cc文件通過鏈接.so文件&使用生成的binaray。

我認爲這個鏈接將幫助真的你.. http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

+0

如果我使用dlsym,它是necesarry和使用-ldl是necesarry鏈接-llibrary? – sunset

+0

雅是必需的,因爲當你的可執行文件將要運行時,應該知道.so將是.. –

相關問題