问题内容: 我正在使用 Ubuntu 10.10 这就是我所做的。 Hello.java : 然后我运行以下命令: 我已获得和。 您好 : 然后我创建了 Hello.cpp : 现在我认为我搞砸了。我从本指南(“ 编译动态或共享库” 部分)中 得到了 启发 : __ 生成文件 但是当我尝试运行它时,出现以下错误: 我什至尝试了这个: 没有结果。 我知道我在做一些非常愚蠢的事情,但我不知道这是什么。
问题内容: 我参与了有关Linux库的一些辩论,并想确认一些事情。 以我的理解(如果我做错了请纠正我,稍后我将编辑我的文章)在构建应用程序时有两种使用库的方式: 静态库(.a文件):在链接时,会将整个库的副本放入最终应用程序中,以便调用方应用程序始终可以使用库中的功能 共享对象(.so文件):在链接时,仅通过相应的标头(.h)文件针对其API验证了对象。该库直到需要运行时才真正使用。 静态库的明显
问题内容: 我有一个可执行文件和一个动态库(.so)。该库会导出一些符号,并且可执行文件会成功调用它。但是我想使库调用可执行文件的功能成为可能。我试图在可执行文件中执行以下操作: 和这个在图书馆: 但是当我调用可执行文件(以加载库)时,它返回error 。我该如何解决? 问题答案: 在Linux / ELF中,您可以将选项传递给链接器(在编译器驱动程序上),以便将可执行文件中的符号导出到共享库中。
问题内容: 我有一个第三方库,主要由大量的静态()库文件组成。我可以将其编译为单个库文件,但我确实需要将其作为单个共享库文件。 有什么方法可以将静态文件转换为共享文件?或更笼统地说,是否有一种将大量静态文件和一些目标文件合并为一个文件的好方法? 问题答案: 是否这样做(当然带有适当的-L) 不是吗
问题内容: 我正在尝试建立一个共享库。让我们说libabc.so。它使用另一个.so文件,例如lib123.so(/ usr / local / lib中的一个lib)。现在我在我的应用程序中使用共享的liblibabc.so。说我的应用程序。我想知道我应该如何链接这些二进制文件?我不想直接将我的应用程序与lib123.so链接。my- app应该仅与libabc.so链接。我怎样才能做到这一点?
问题内容: 如何使用Python访问Microsoft Access数据库?用SQL吗? 我希望可以在Linux上使用的解决方案,但也可以选择Windows。 我只需要读取权限。 问题答案: 不过,我已经使用PYODBC成功连接到 Windows上 的MS Access数据库。安装很容易,用法也很简单,您只需要设置正确的连接字符串(列表中提供了用于MS Access的连接字符串),然后使用示例。
问题内容: 说我有a.so和b.so。我是否可以将c.so生成为具有a和b导出的所有功能的单个共享库,当然可以解决所有内部依赖关系(即a.so调用的b.so的所有功能,反之亦然)? 我试过了 但这不起作用。 如果我在aa和ba中归档ao和bo(也不应修改ao和bo),也是如此 谢谢 问题答案: 除了AIX之外,在所有UNIXen上实际上都不可能将多个共享库合并为一个:链接器将.so视为“最终”产品
问题内容: 我正在尝试从VPS中的makefile编译此源代码,但无法正常工作。VPS是64美分的操作系统 这是完整的错误 这是我的makefile: 有人知道怎么了吗? 问题答案: 执行编译器告诉您的操作,即使用进行重新编译。要了解此标志的作用以及在这种情况下为什么需要此标志,请参阅GCC手册的 代码生成选项 。 简而言之,术语“ 位置无关代码” (PIC)指的是与内存地址无关的生成的机器代码,
问题内容: 我的问题如下: 程序中何时指定共享对象的地址?在链接期间?载入中?如果我想在程序内部找到命令的内存地址,可以在中轻松找到它,但是如果我不想将程序带入调试器怎么办? 此地址可以在运行之间更改吗?是否有其他静态分析工具可让您查看在运行时将库或函数加载到该程序的内存空间中的位置? 编辑:我想在程序之外的信息(即使用实用程序来收集信息) 问题答案: 库由加载(动态连接器或运行时链接又名rtld
问题内容: 我想查看Linux上共享库的导出功能。 什么命令允许我执行此操作? (在Windows上,我使用的程序取决于) 问题答案: 您需要的是它的选择: 导出的sumbol用表示。必须从其他共享库加载的必需符号有一个。请注意,符号表不仅包括函数,还包括导出的变量。 有关更多信息,请参见 手册页。
问题内容: 我想知道系统上的可执行文件使用了哪些库。更具体地说,我想对使用最多的库以及使用它们的二进制文件进行排名。我怎样才能做到这一点? 问题答案: 使用到列表共享为每个可执行文件库。 清理输出 排序,计算计数,按计数排序 要在“ / bin”目录中找到所有可执行文件的答案: 将上面的“ / bin”更改为“ /”以搜索所有目录。 输出(仅针对/ bin目录)将如下所示: 编辑-删除了“ gre
问题内容: 有没有办法检查正在运行的进程在使用哪些库? 更具体地说,如果程序使用dlopen加载某些共享库,则readelf或ldd不会显示它。是否有可能从正在运行的进程中获取该信息?如果是,怎么办? 问题答案: 其他人在正确的道路上。这有几种方法。 或者,使用strace: 这两个都假定共享库的路径中的某个位置带有“ .so”,但是您可以对其进行修改。第一个给出了相当漂亮的输出,只是一个库列表,
问题内容: 我有一个用汇编语言编写的函数,并在64位Linux(Ubuntu)上使用yasm和GCC进行了编译。它只是使用来向stdout打印一条消息,如下所示: 它由使用GCC编译的C程序调用: 生成命令: 这是问题所在: 运行该程序时,它会显示错误消息,并在调用以下命令时立即出现段错误: 用objdump拆解后,我看到调用是用错误的地址进行的: (671是下一条指令的地址,而不是的地址) 但是
问题内容: 我想在Linux / AMD64 / Debian和GCC 4.6上开发一个多线程C 应用程序(最终大多数C 代码将由应用程序本身生成,可以将其视为高级领域特定语言)。可能是最新的C ++ 11标准)。 我真的想对我的所有堆分配使用Boehm的保守垃圾收集器,因为我想分配而不用担心。我假设Boehm的GC运行良好。 使用(而不是C)C 的主要动机是所有的算法和集合 … 由C 标准库提供
问题内容: 我正在尝试在此Debian lenny系统上使用g ++链接应用程序。ld抱怨找不到指定的库。这里的特定示例是ImageMagick,但是其他一些库也遇到类似的问题。 我通过以下方式调用链接器: ld抱怨: 但是,libmagic存在: 如何进一步诊断此问题,可能出什么问题了?我在做些完全愚蠢的事情吗? 问题答案: 问题是链接器正在寻找,但是您只有 一个快速的技巧是符号链接到