【问题标题】:how to work with an .so file without running it at the command line g++如何使用.so文件而不在命令行g ++运行它
【发布时间】:2011-09-05 07:54:27
【问题描述】:

我创建了一个名为 car.so 的 .so 文件。我想在 test.cc 代码中测试和使用这个库。在命令行中我想编译:g++ test.cc -o test。我不想也链接(包括)图书馆 car.so。

怎么做?

我的 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 );

我还想问是否可以在单个 .so 文件中包含 3 个 .so 文件。

编辑:

我正在开发 Ubuntu/Linux

【问题讨论】:

  • 看看动态链接。这取决于操作系统,但我假设您使用某种 Linux。在那里,看看 dlsym 和相关函数。
  • 是的。我在 UUNTU 工作。依赖操作系统是什么意思?是否可以使用包含库而不将库包含到编译命令的 G++ 一个 C 文件运行?
  • 老兄,你的 Caps Lock 有问题
  • 是的,这是可能的。在您的源代码中,您加载库并使用 dlsym 等在其中查找符号。我不知道语法,但是 dlsym 和相关函数的手册页应该可以帮助你。
  • 为您创建一个新问题附加问题是获得良好答案的最佳方式,因为它是完全独立的问题(至少对我们而言)

标签: c++ c ubuntu g++ shared-libraries


【解决方案1】:

一般来说,您应该在(应用程序)/test.cc 中包含 .so 库的 .h 文件,然后通过链接该 .so 文件并使用生成的二进制文件来编译该 test.cc 文件。

我认为这个链接会真正帮助你.. http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

【讨论】:

  • 如果我使用 dlsym 是否需要使用 -ldl 是否需要与 -llibrary 链接?
  • 是的,这是必要的,因为当你的可执行文件要运行时,它应该知道 .so 将在哪里..
猜你喜欢
  • 1970-01-01
  • 2013-01-30
  • 2020-09-02
  • 1970-01-01
  • 2017-07-27
  • 1970-01-01
  • 2020-09-13
  • 2015-08-13
  • 2016-05-01
相关资源
最近更新 更多