Tag: 共享库

将静态库转换为共享库?

我有一个第三方库,主要由大量的静态( .a )库文件组成。 我可以把它编译成一个.a库文件,但是我真的需要它成为一个.so共享库文件。 有没有办法将一个静态的.a文件转换成一个共享的.so文件? 或者更普遍的是,将大量静态.a文件与几个.o对象文件合并为一个.so文件是一种好方法吗?

node.js标准模块的全局variables?

我知道全局variables是不好的。 但是,如果我在我的框架中的40个文件中使用节点的模块“util”,那么把它声明为一个全局variables是不是更好: util = require('util'); 在index.js文件中,而不是在40个文件中写入该行? 因为我经常在每个文件中使用相同的5-10个模块,这样可以节省大量的时间,而不是始终复制粘贴。 在这种情况下干不好?

如何为Android开发创build自己的库,以便在您编写的每个程序中使用?

我是一名Delphi程序员,多年来撰写了数百个类和程序,可以在我编写的每个Delphi程序中使用。 这个库被称为dlib,可以在每个Delphi程序中使用,将该文件夹放在我的库path中,并使用Delphi单元的使用部分中的一个单元。 对于Java和Android开发来说,这是一个全新的东西,我想知道如何以类似的方式来做到这一点。 所以我的问题,我怎么能写自己的类,把它们放在一个全局文件夹,并在我写的每个Android程序中使用这些类和例程 ? 我知道这是一个基本的问题,我可以通过search谷歌并在Eclipse中试用,但是如果有人能把我放在正确的轨道上,我知道我会节省很多时间。 谢谢。

Android NDK链接

我想构build一个调用到C ++后端的Android应用程序。 这个后端使用ZeroMQ进行消息传递。 根据ZeroMQ指南上的android构build页面 ,我已经构build了一个ndk版本6的本地工具链,并使用它来(成功)构buildZeroMQ。 然而,当我用JNI实现构build自己的.so时,似乎无法使所有的东西都正确加载。 具体来说,如果我调用System.LoadLibrary(“zmq”) ,这个成功完成,但如果我然后调用* System.LoadLibrary(“my_lib”)*我总是得到一个UnsatisfiedLinkError抱怨: Cannot load library reloc_library[1244]: 29 cannot locate zmq_msg_init'… libmy_lib.so已经被生成了几种不同的方式,每个都没有成功。 生成它后,我总是将libmy_lib.so(以及libzmq.so)复制到我的android项目的文件夹:libs / armeabi /。 # Compile all object files – this part was done for all options /opt/android-toolchain/bin/arm-linux-androideabi-g++ -fpic -c Client_Events.cpp \ Client Wrapper.cpp jni.cpp -I /opt/android-root/include/ -I /my/project/specific/stuff # Option 1 – Don't link the lib […]

为什么我得到一个gcc“未定义的引用”错误试图创build共享对象?

为什么使用gcc得到“未定义参考”错误? 我正在尝试创build一个导出一个函数“external()”的共享对象(.so)。 然后我尝试链接到.so,但得到“未定义参考”外部“”。 我在这里做错了什么? 文件:external.c int external() { return 5; } 文件:program.c int external(); int main(char** argv, int* argc) { return external(); } 命令: $ gcc -fPIC -c external.c $ gcc -shared -o libexternal.so external.o $ gcc -L. -lexternal -o program program.c /tmp/cc3MmhAE.o: In function `main': program.c:(.text+0x7): undefined reference to `external' collect2: ld returned 1 […]

将两个共享库链接到一些相同的符号

我正试图链接两个不同的共享库。 这两个库定义了一些共享名称但具有不同实现的符号。 我似乎无法find一种方法来使每个图书馆都使用自己的实施。 例如,这两个库定义了一个全局函数bar() ,它们都在内部调用。 库从foo1()调用它,而库二从foo2()调用它。 Lib1.so: T bar T foo1() // calls bar() Lib2.so: T bar T foo2() // calls bar() 如果我将我的应用程序与Lib1.so和Lib2.so连接起来,即使在调用foo2()时也会调用Lib1.so中的bar实现。 另一方面,如果我将我的应用程序链接到Lib2.so,然后是Lib1.so,那么bar总是从Lib2.so中调用。 有没有办法让图书馆总是比其他图书馆更喜欢自己的实现?

build立一个.so这也是一个可执行文件

所以大家可能知道glibc的/lib/libc.so.6可以在shell中像正常的可执行文件那样执行,在这种情况下,它会打印版本信息并退出。 这是通过在.so中定义一个入口点来完成的。 对于某些情况,也可以将其用于其他项目。 不幸的是,你可以通过ld的-e选项设置的低级入口点有点太低级:dynamic加载器不可用,所以你不能调用任何适当的库函数。 glibc出于这个原因在这个入口点通过裸机系统调用来实现write()系统调用。 我现在的问题是,任何人都可以想出一个很好的方法,如何从这个入口引导一个完整的dynamic链接器,以便可以访问其他.so的函数?

从C调用Go函数

我正在尝试创build一个用C语言编写的静态对象(比如说一个内核模块)。 我find了关于从Go调用C函数的文档,但我还没有find很多关于如何去其他方式。 我发现这是可能的,但是很复杂。 这是我发现的: 关于C和Go之间callback的博客文章 Cgo文档 Golang邮件列表文章 有没有人有这方面的经验? 总之,我试图创build一个完全用Go编写的PAM模块。

如何在C ++中添加额外的库?

Allergro是一个开源的C ++插件库,用于graphics处理。 我如何将这个库添加到我的编译器? 这些说明不适合我,因为我有Windows 7.我不知道操作系统是否重要。 我有Visual Studio速成版。 该库是一个.dll文件。 我如何将其添加到我的项目?

ld找不到现有的库

我试图在Debian lenny系统上用g ++连接一个应用程序。 ld抱怨找不到指定的库。 这里的具体例子是ImageMagick,但是我也有一些其他类似的问题。 我打电话给链接器: g++ -w (..lots of .o files/include directories/etc..) \ -L/usr/lib -lmagic ld抱怨: /usr/bin/ld: cannot find -lmagic 但是,libmagic存在: $ locate libmagic.so /usr/lib/libmagic.so.1 /usr/lib/libmagic.so.1.0.0 $ ls -all /usr/lib/libmagic.so.1* lrwxrwxrwx 1 root root 17 2008-12-01 03:52 /usr/lib/libmagic.so.1 -> libmagic.so.1.0.0 -rwxrwxrwx 1 root root 84664 2008-09-09 00:05 /usr/lib/libmagic.so.1.0.0 $ ldd /usr/lib/libmagic.so.1.0.0 linux-gate.so.1 => (0xb7f85000) […]