Questions tagged «shared-libraries»

共享库是程序启动时由程序加载的库。每个库的单个共享副本被加载到物理内存中,并且可以被多个进程同时使用。这样可以减少内存使用并提高系统性能。请勿单独使用此标签。

5
如何为编写的每个程序创建用于Android开发的自己的库?
我是一名Delphi程序员,多年来编写了数百种类和例程,可在我编写的每个Delphi程序中使用。 该库称为dlib,可通过将文件夹放在我的库路径中并使用Delphi单元的uses部分中的单元之一来在每个Delphi程序中使用。 作为Java和Android开发的新手,我想知道如何以类似的方式进行操作。 所以我的问题是,我如何编写自己的类,将它们放在某个全局文件夹中,并在我编写的每个Android程序中使用这些类和例程? 我知道这是一个基本问题,我可能可以通过搜索Google并在Eclipse中进行尝试来找出,但是如果有人可以让我走上正确的道路,我知道我会节省很多时间。 谢谢。

7
带有GCC的C / C ++:将资源文件静态添加到可执行文件/库
有人知道如何使用GCC将任何资源文件静态地直接编译到可执行文件或共享库文件中吗? 例如,我想要添加永不更改的图像文件(如果更改,则无论如何我都必须替换该文件),并且不希望它们位于文件系统中。 如果这是可能的(我认为是因为Windows的Visual C ++也可以这样做),如何加载存储在自己的二进制文件中的文件?可执行文件会自行解析,查找文件并从中提取数据吗? 也许我还没有看到GCC的选择。使用搜索引擎并没有真正吐出正确的东西。 我需要此功能才能用于共享库和普通的ELF可执行文件。 任何帮助表示赞赏

1
-rpath和-L有什么区别?
gcc并ld提供了多种方法来指定库的搜索路径--rpath和-L标志。手册页没有显示这两个标志之间的差异,实际上是说每个标志都在库搜索路径中添加了一个库。但是,两个标志都做完全相同的事情似乎很奇怪。这两个选项之间有什么区别(如果有)?



7
编译失败,“在创建共享库时,无法使用针对.rodata.str1.8的重定位R_X86_64_32”
我正在尝试从VPS中的makefile编译此源代码,但无法正常工作。VPS是64美分的操作系统 这是完整的错误 # make gcc -c -O3 -w -DLINUX -I../SDK/amx/ ../SDK/amx/*.c g++ -c -O3 -w -DLINUX -I../SDK/amx/ ../SDK/*.cpp g++ -c -O3 -w -DLINUX -I../SDK/amx/ *.cpp g++ -O2 -fshort-wchar -shared -o "TCP_V1.so" *.o /usr/bin/ld: TCP-LINUX_V1.o: relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC …

4
轻松检查共享库中未解析的符号?
我正在编写一个相当大的C ++共享对象库,并且遇到了一个使调试困难的小问题: 如果我在头文件中定义函数/方法,却忘记为它创建存根(在开发过程中),因为我正在构建为共享对象库而不是可执行文件,那么编译时不会出现任何错误,告诉我忘记实现该功能。我发现问题的唯一方法是在运行时,当最终与该库链接的应用程序崩溃并出现“未定义符号”错误时。 我正在寻找一种简单的方法来检查我在编译时是否具有所需的所有符号,也许可以将它们添加到我的Makefile中。 我想出的一个解决方案是运行已编译的库,nm -C -U以获取所有未定义引用的已分解列表。问题在于,这还会列出其他库(例如GLibC)中所有引用的列表,当最终应用程序放在一起时,这些引用当然会与此库链接在一起。这将有可能使用的输出nm,以grep通过所有我的头文件,看看是否有任何名称的对应..但这似乎疯了。当然这不是一个不常见的问题,并且有更好的解决方法?

2
如何在Android中使用addr2line
我坚持使用我的应用程序,因为我无法调试,因为它是多线程应用程序,崩溃并出现错误SIGSEGV。我从LogCat获得了很多信息,这使我可以在本机库中找到地址。如果可以将这些地址转换为代码,将很有帮助。 有人知道如何使用android-ndk随附的addr2line吗?



7
python pip指定库目录和包含目录
我正在使用pip并尝试安装一个名为pyodbc的python模块,该模块对非Python库(例如unixodbc-dev,unixodbc-bin,unixodbc)具有某些依赖性。目前,我只能在玩游戏,因此无法在整个系统上安装这些依赖项,因此我将它们安装在非标准位置。如何告诉pip在哪里寻找这些依赖项?更确切地说,如何在构建pyodbc扩展时通过包含dirs(gcc -I)和库dirs(gcc -L -l)的点传递信息?

2
什么是扩展名为.a的文件?
我下载了这个:https : //github.com/mongodb/mongo-c-driver 现在,我试图在我的C程序中使用它,但是我不知道如何处理生成的.a文件。这些是什么?我找不到任何信息,甚至在GCC手册中也找不到。 我这样构建它: scons --c99 另外,我可以在C89程序中使用C99库吗?


7
ctypes错误:libdc1394错误:无法初始化libdc1394
我正在尝试将程序编译为一个共享库,可以在使用ctypes的Python代码中使用该共享库。 使用以下命令,库可以正常编译: 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 这是怎么回事?

1
升级到macOS Mojave后,MATLAB不再卸载MEX文件
在MATLAB中,clear mex从内存中卸载所有MEX文件(除非它们已被锁定)。在macOS的早期版本下,我只需发出clear mex命令即可重新编译MEX文件并运行修改后的版本,而无需重新启动MATLAB 。在莫哈韦沙漠下,这不再可能。 例如,使用以下简单的MEX文件(get_data_pointer.c): #include "mex.h" void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { plhs[0] = mxCreateNumericMatrix(1, 1, mxUINT64_CLASS, mxREAL); *(uint64_t*)mxGetData(plhs[0]) = (uint64_t)mxGetData(prhs[0]); } 我们可以创建MEX文件并将其加载到内存中 mex get_data_pointer.c get_data_pointer(0) 为了清除它, clear mex [~,mexfiles] = inmem version -modules inmem确实返回了一个空单元格数组,指示未在内存中加载任何MEX文件,但是version -modules(未记录,根据此答案)仍显示/Users/cris/matlab/get_data_pointer.mexmaci64在其输出中。更改MEX文件的源代码并重新编译表明,确实从未重新加载MEX文件,旧版本仍在运行,直到有人退出MATLAB。 我在macOS Mojave的MATLAB R2017a上看到了这一点。在High Sierra下使用相同的MATLAB版本从来没有问题。 如何强制MATLAB在不重新启动的情况下卸载MEX文件?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.