Tag: 共享库

用cmake创build一个共享库

我写了一个库,使用自编的Makefile进行编译,但现在我想切换到cmake。 树看起来像这样(我删除了所有不相关的文件): . ├── include │ ├── animation.h │ ├── buffers.h │ ├── … │ ├── vertex.h │ └── world.h └── src ├── animation.cpp ├── buffers.cpp ├── … ├── vertex.cpp └── world.cpp 所以我想要做的只是将源代码编译成共享库,然后将其与头文件一起安装。 我发现的大多数例子都是用一些共享库编译可执行文件,但从来不只是一个普通的共享库。 如果有人能够告诉我一个使用cmake的非常简单的库,这也是有帮助的,所以我可以使用这个例子。

如何列出非本地二进制文件的库依赖关系?

在为本地平台开发时,我可以使用ldd列出所有的共享库(.so文件),我构build的二进制可执行文件将在启动时尝试加载。 但是在交叉编译时,我不知道如何获得相同的信息。 ldd不是一个普通的binutils工具,比如strip或者ar ,它们可以和gcc一起构build,用于交叉编译,相反,它是一个神秘的shell脚本,显然只能在本地平台上运行。 所以,使用跨目标binutils工具,有什么办法可以得到一个外国二进制文件的dynamic链接依赖列表?

-rpath和-L有什么区别?

gcc和ld提供了许多方法来指定库的searchpath,其中包括-rpath和-L标志。 手册页显示这两个标志之间没有区别,有效地说每个标志添加一个库到库searchpath。 然而,两个国旗做的事情完全一样,这似乎很奇怪。 这两种select之间有什么区别?

容易检查共享库中的未解决的符号?

我正在编写一个相当大的C ++共享对象库,并遇到一个小问题,使debugging变得很痛苦: 如果我在头文件中定义一个函数/方法,而忘记为它创build一个存根(在开发过程中),因为我正在构build一个共享对象库而不是一个可执行文件,所以编译时不会出现错误,告诉我我有忘记执行该function。 我发现错误的唯一方法是在运行时,最终一个链接到这个库的应用程序会因为'未定义的符号'错误而崩溃。 我正在寻找一种简单的方法来检查编译时是否有所需的所有符号,也许我可以将其添加到我的Makefile中。 我提出的一个解决scheme是通过nm -C -U运行编译的库,以获取所有未定义引用的demangled列表。 问题是这也出现在其他库中的所有引用的列表,如GLibC,当最终应用程序放在一起时,这些链接当然会与这个库链接。 有可能使用nm的输出grep通过我所有的头文件,看看是否有任何相应的名称..但这似乎是疯了。 这当然不是一个不常见的问题,有更好的解决办法吗?

Windows的ldd相当于什么?

Windows的ldd相当于什么?

ctypes错误:libdc1394错误:无法初始化libdc1394

我试图编译我的程序到一个共享库,我可以在Python代码中使用ctypes。 库使用这个命令编译好: g++ -shared -Wl,-soname,mylib -O3 -o mylib.so -fPIC [files] `pkg-config –libs –cflags opencv` 但是,当我尝试使用ctypes导入它 from ctypes import * mylib = CDLL("/path/to/mylib.so") print mylib.test() // Expected output: Hello World 我得到以下错误: libdc1394 error: Failed to initialize libdc1394 这是怎么回事?

Android中的INSTALL_FAILED_MISSING_SHARED_LIBRARY错误

当我试图运行使用Google API的Android应用程序时,出现以下错误 [2009-07-11 11:46:43 – FirstMapView]安装错误:INSTALL_FAILED_MISSING_SHARED_LIBRARY [2009-07-11 11:46:43 – FirstMapView]请检查logcat输出了解更多详情。 [2009-07-11 11:46:44 – FirstMapView]发布取消! 任何人都可以帮我解决这个错误?

为什么Python不能findsys.path中的目录中的共享对象?

我正在尝试导入pycurl: $ python -c "import pycurl" Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: libcurl.so.4: cannot open shared object file: No such file or directory 现在,libcurl.so.4位于/ usr / local / lib中。 正如你所看到的,这是在sys.path中: $ python -c "import sys; print sys.path" ['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', '/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', '/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', '/usr/local/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', '/usr/local/lib/python2.5/site-packages'] 任何帮助将不胜感激。

我如何找出所有符号是从共享对象中导出的?

我有一个共享对象(dll)。 我如何找出所有的符号是从那里出口?

使用gcc命令行从.c文件生成.so文件

我正在尝试为Linuxdynamic库(.so文件)创build一个hello世界项目。 所以我有一个文件hello.c: #include <stdio.h> void hello() { printf("Hello world!\n"); } 如何使用命令行中的gcc创build一个导出hello()的.so文件?