Tag: 共享库

如何在Mac OSX下使用gcc设置可执行文件的运行时path(-rpath)?

我想在编译时在Mac OSX下设置一个可执行文件(对于连接器)的运行时path,以便在程序启动时由dynamic连接器find非标准位置的共享库。 在Linux下,可以使用-Xlinker -rpath -Xlinker /path/to (或使用-Xlinker -rpath -Xlinker /path/to , -Xlinker -rpath -Xlinker /path/to -Wl,-rpath,/path/to ),在Solaris下,可以将-R/path/to添加到编译器命令行。 我发现一些信息 ,Mac OS X gcc自10.5版以来支持-rpath支持,即从〜2008年。 我试图用一个最小的例子来工作 – 没有成功: $ cat blah.c int blah(int b) { return b+1; } 和: $ cat main.c #include <stdio.h> int blah(int); int main () { printf("%d\n", blah(22)); return 0; } 像这样编译它: $ gcc […]

python pip指定一个库目录和一个包含目录

我正在使用pip,并尝试安装一个名为pyodbc的python模块,这个模块对unixodbc-dev,unixodbc-bin,unixodbc等非python库具有一定的依赖性。 目前我无法在系统范围内安装这些依赖项,因为我只是在玩,所以我把它们安装在一个非标准的位置。 如何告诉pip在哪里寻找这些依赖关系? 更确切地说,如何在构buildpyodbc扩展时使用包含dirs(gcc -I)和库dirs(gcc -L -l)的pip来传递信息?

如何在Haskell项目中使用DLL?

我想在Haskell项目中使用外部库RDFox 。 上下文:我正在使用GHC 7.10和堆栈 ,都是64位的Windows和Linux。 RDFox是用C ++编程的。 RDFox共享库(.dll,.so)可以用Java和Python包装下载。 目标:我想在我的Haskell项目中重用RDFox(.dll,.so)编译的库,所以我需要为RDFox创build一个Haskell包装器。 问题:对于Haskell来说相对较新,我很难知道从哪里开始。 我find了关于这个主题的几个页面(来自Haskell wiki和StackOverflow),但是工作stream和configuration对我来说并不清楚。 问题:我想知道: 如何configuration堆栈和cabal使用外部库,build立在Windows 或 Linux(不同的机器,相同的存储库)。 如何在此外部库上configurationGHCi进行交互式testing。 Python包装器翻译成Haskell是最好的方法吗? 我想避免对RDFox C ++代码的分析。

在OS X上创buildHaskell共享库

我试图从Haskell源代码创build一个共享库。 我试过按照这里的说明: http : //weblog.haskell.cz/pivnik/building-a-shared-library-in-haskell/但我只是没有任何运气。 当我用Haskell 64位(从2011.4.0.0 ghc 7.0.4)编译我得到以下错误: ld: pointer in read-only segment not allowed in slidable image, used in ___gmpn_modexact_1c_odd 作为替代scheme,我也尝试了32位版本,并根据确切的标志,我用链接获取错误,如: Library not loaded: /usr/local/lib/ghc-7.0.4/base-4.3.1.0/libHSbase-4.3.1.0-ghc7.0.4.dylib 我确实设法通过在链接器行中添加-lHSrts来进一步实现。 这让我到成功链接和加载库的点,但我无法find函数名称使用dlsym(或手动使用nm | grep) 任何提示将不胜感激,一个例子make文件,或构build线已经成功地build立(和使用)在OS X共享库将不胜感激。 对于Haskell来说,我是个新手,不知道是否应该继续敲我的脑袋,假设问题出在我身上,或者出于各种原因,我不希望这个问题能够在OS X上运行。 我已经尝试过的所有组合的git回购可在这里: https : //github.com/bennoleslie/haskell-shared-example我做了一些工作的32位ghc,但不是64位呢。

如何在GCC Linux中指定非默认的共享库path? 运行时出现“加载共享库时出错”

有一台笔记本电脑,我没有根特权。 到机器上我有一个库安装使用configure –prefix=$HOME/.usr 。 之后,我在~/.usr/lib获得了这些文件: libXX.so.16.0.0 libXX.so.16 libXX.so libXX.la libXX.a 当我编译一个程序,调用库提供的函数之一,这个命令: gcc XXX.c -o xxx.out -L$HOME/.usr/lib -lXX xxx.out没有警告就生成了,但是当我运行这个错误时抛出: ./xxx.out: error while loading shared libraries: libXX.so.16: cannot open shared object file: No such file or directory ,尽pipelibXX.so.16驻留在那里。 我的线索假设是~/.usr/lib在xxx.out被调用时没有被search到。 但是我能做些什么来指定.so的path,以便xxx.out可以在那里查找.so文件? 另外就是当我向gcc提供-static时候,另外一个错误是这样的: undefined reference to `function_proviced_by_the_very_librar' 看来。即使-L和-l被赋予gcc也没有关系。 我该怎么做,以build立一个可用的exe文件库? 对于和我有同样问题的其他人来说 我在tldp上find了一篇有用的文章 。 它引入了静态/共享/dynamic加载的库,以及一些示例代码来使用它们。

.a .o和.lo文件之间的区别

C中.a .o和.lo文件有什么区别?

CMake:如何产生二进制“尽可能静态”

我想控制在CMake中find/链接到我的二进制文件的types。 最终的目标是“尽可能静态地生成二进制文件”,即静态链接到每个具有静态版本的库。 这一点非常重要,因为在testing过程中可以在不同的系统上移植二进制代码。 ATM似乎很难实现FindXXX.cmake包,或者更确切地说find_library命令总是在静态和dynamic都可用的时候selectdynamic库。 关于如何实现这个function的技巧 – 最好以一种优雅的方式 – 非常受欢迎!

JS – 不能合并lib文件

我有一个index.html文件中的多个lib文件,按照正在运行的应用程序的顺序加载。 <!– example of some of them… –> <script src="/./sys/lib/jquery.min.js"></script> <script src="/./sys/lib/jquery.ui.min.js"></script> <script src="/./sys/lib/jquery.easing.min.js"></script> <script src="/./sys/lib/underscore.min.js"></script> <script src="/./sys/lib/handlebars.min.js"></script> <script src="/./sys/lib/backbone.min.js"></script> <script src="/./sys/lib/moment.min.js"></script> <script src="/./sys/lib/libs.extensions.js"></script> 这些运行良好,他们已经全部缩小。 现在,我想把这些全部合并成一个文件来加载速度: <script src="/./sys/lib/libs.all.js"></script> 因此,我打开了新的libs.all.js文件,并按照与上面列出的顺序完全相同的顺序 ,将缩小的.js文件逐个粘贴到零修改中。 这工作,直到我到了moment.js。 当我然后粘贴并运行它,我得到一个JS错误。 TypeError: (intermediate value)(…) is not a function 我没有得到我所缺less的东西 – 如果我们将它们按正确的顺序粘贴到HTML文件中,那么它们有什么区别呢?

如何检查运行时为给定进程加载哪些共享库?

有没有办法来检查哪些库是一个正在运行的进程使用? 更具体地说,如果一个程序使用dlopen加载一些共享库,那么readelf或ldd就不会显示它。 是否有可能从正在运行的过程中获取这些信息? 如果是的话,怎么样?

确定Linux中二进制文件的目标体系结构(库或可执行文件)

我们遇到一个问题,这个问题涉及到一个运行在带有Via C3处理器的研华POS板上(相当老的)FC3下的Java应用程序。 Java应用程序有几个编译的共享库,通过JNI访问。 通过C3处理器被认为是i686兼容。 前一段时间,在MiniItx板上安装相同处理器的Ubuntu 6.10之后,我发现前面的语句不是100%正确的。 由于在C3处理器中缺乏一些特定和可选的i686指令,Ubuntu内核在启动时被挂起。 在使用i686优化时,GCC编译器默认使用缺lessC3实现i686集的这些指令。 在这种情况下,解决scheme是使用i386编译版本的Ubuntu发行版。 Java应用程序的基本问题是FC3发行版是通过从另一台PC的HD图像克隆而安装在HD上的,这次是Intel P4。 之后的发行需要一些黑客运行,如用i383编译版本replace一些软件包(如内核之一)。 问题是,工作一段时间后,系统完全挂起没有痕迹。 我担心一些i686代码会留在系统的某个地方,并可能随时随机执行(例如从挂起模式恢复之类的东西)。 我的问题是: 有没有什么工具或方法可以找出特定的体系结构是二进制文件(可执行文件或库)的目标,只要“ 文件 ”不能提供太多的信息?