将 ruby​​ 库静态链接到 C++ 应用程序

Posted

技术标签:

【中文标题】将 ruby​​ 库静态链接到 C++ 应用程序【英文标题】:Statically link ruby libraries to c++ application 【发布时间】:2011-05-25 12:19:13 【问题描述】:

我最近问了一个关于在 c++ 应用程序中嵌入 ruby​​ 的问题

Embedding ruby in c++, problem with ruby libraries

现在我遇到了另一个与此相关的问题。我设法编译并运行了这个应用程序,但我无法静态链接 ruby​​。这就是我的控制台所说的:

####:~/Desktop/rubyParser$ g++ -o ruby_test ruby_test.c -I/usr/lib/ruby/1.8/x86_64-linux/ -static -lruby1.8
/usr/bin/ld: cannot find -lruby1.8

但是如果我打开 /usr/bin,会有一个“ruby1.8”文件(没有扩展名)。可能我需要另一个文件.. 我使用的是 Ubuntu,当然我不是 Linux 专家,所以请耐心等待 :)

我该如何解决?

提前致谢

再见

【问题讨论】:

【参考方案1】:

通过指定-lruby1.8,链接器将在标准库位置(可能是/usr/lib//usr/local/lib)中查找名为libruby1.8.so 的文件。

看看那些目录,看看里面是否有类似的东西。

如果没有,你是否安装了 development 的 ruby​​ 包?如果只是链接过程失败,我会假设你有(否则,你很可能不会有标题)。

我从未与 ruby​​ 关联,但您是否尝试过指定 -lruby 而不是 -lruby1.8

【讨论】:

1) /usr/lib 中有"libruby1.8.so" 2) 安装了开发包 3) -lruby 也不行 还有更多: libruby1.8.so -> libruby1.8.so.1.8.7 ; libruby1.8.so.1.8 -> libruby1.8.so.1.8.7; libruby1.8.so.1.8.7; 52 libruby1.8-static.a【参考方案2】:

您是否尝试将二进制文件添加到您的 PATH 中?

【讨论】:

如果你的意思是:“g++ -o ruby​​_test ruby​​_test.c -I/usr/lib/ruby/1.8/x86_64-linux/ -I/usr/bin/ -static -lruby1.8” ,它不会改变任何东西。 rubypath 是什么? /usr/lib/ruby/1.8/,这里有一些 file.rb; /usr/lib/ruby/1.8/x86_64-linux,这里有一些file.so file.h;或者别的什么?【参考方案3】:

如果您最近安装了相关的 Ruby 库,您可能需要转到命令行并输入 sudo ldconfig 以使用最新版本的库及其库刷新 ld 的配置文件地点。

编辑:从下面的 cmets 中,如果您遇到运行时链接问题,您只需要执行此步骤,此时您还没有。但至少要记住这一点,因为它过去为我解决了运行时链接问题(即,帮助我解决了 GMP)。

【讨论】:

OP 遇到链接问题。 ldconfig 只创建 运行时 所需的符号链接。你说得对,这可能是个问题,但不是现阶段。

以上是关于将 ruby​​ 库静态链接到 C++ 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

将静态本机库链接到托管 C++ 项目会在

使用 Numpy 将 Python 库静态链接到 C (C++)

C++静态库与动态库详解

如何将 C++ dll 静态链接到 .NET 库(将 c++ dll 构建到网络包装器 dll 以获取一个 dll)

将静态 Qt 库链接到 c 程序

深入理解计算机系统CSAPP Ch7:静动态库制作与神奇的库打桩机制