2011-09-05 33 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将是.. –

相关问题