首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >告诉omake使用c库的静态版本

告诉omake使用c库的静态版本
EN

Stack Overflow用户
提问于 2018-07-26 23:19:18
回答 2查看 96关注 0票数 0

我正在使用omake构建一个本地二进制可执行文件。在链接并尝试运行它之后,它无法运行,从而产生以下错误:

加载共享库时出错:libprotobuf c.so.1:无法打开共享对象文件:没有这样的文件或目录

是否有一种方法,在编译时,告诉可执行文件获取静态版本:libProbuf-C.A而不是共享on?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-30 13:17:01

似乎没有一个全局标志可以传递给ld,链接器,它强制链接器更喜欢静态库,而不是动态库。在我的例子中,我显式地设置了库名如下:

OCAML_LINK_FLAGS += -cclib -l:libprotobuf-c.a

票数 0
EN

Stack Overflow用户

发布于 2018-07-27 18:28:16

我不熟悉omake,但我相信您要找的是ocamlc的标志是dllpath

代码语言:javascript
复制
   -dllpath dir
          Adds  the  directory dir to the run-time search path for shared C libraries.  At link-
          time, shared libraries are searched in the standard search path (the one corresponding
          to  the  -I option).  The -dllpath option simply stores dir in the produced executable
          file, where ocamlrun(1) can find it and use it.

如果您可以将omake配置为将适当的-dllpath参数传递给ocamlc,则应该可以选择。

在幕后,我相信这是使用了rpath特性(运行时库搜索路径)的ld,GNU。见https://linux.die.net/man/1/ld。还有一个chrpath实用程序来更改已经构建的可执行文件的rpath

另一个选项是使用LD_LIBRARY_PATH集运行可执行文件,以便共享库位于加载路径上。您还可以在适当的情况下安装共享库系统。最后一个选项是在应用程序使用dlopen引导时手动加载库。

正确的选择取决于您将如何分发它,以及您将分发给谁,如果有的话。请记住,如果使用rpath/dllpath,最终用户不太可能在相同的位置安装protobuf

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51548749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档