问题标签 [shared-libraries]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
13 回答
381058 浏览

linux - 如何显示 Linux 中可执行文件使用的所有共享库?

我想知道我系统上的可执行文件使用了哪些库。更具体地说,我想对使用最多的库以及使用它们的二进制文件进行排名。我怎样才能做到这一点?

0 投票
1 回答
913 浏览

version-control - 具有共享库的多个项目/解决方案的源代码控制

我目前正在开展一个项目,将许多 Excel VBA 驱动的工作簿转换为 VSTO 解决方案。所有的工作簿都会共享一些类库和第三方程序集,实际上大部分工作都是在类库中完成的。我目前的文件夹结构是这样布局的。

每个工作簿都是自己的解决方案,工作簿解决方案只是引用文件夹结构中的程序集。我的问题是您将如何布置源代码控制?你会在基地启动存储库吗?或者您会为每个工作簿解决方案创建一个存储库吗?你会重新排列文件夹吗?

现在我们已经完成了最初的开发,我们即将有一群外部开发人员加入到项目中来帮助我们转换其余的工作簿,我真的很喜欢他们能够从基础中签出的想法目录并准备好所有依赖项。我还担心在一个源代码控制存储库下拥有 20 多个解决方案/项目会带来其他问题。

对于加入该项目的人来说,我希望一切都尽可能简单,但我不想牺牲长期可用性。在我看来,我一直在来回走动,一个存储库或每个解决方案一个存储库更简单?

我会很感激你的见解和见解,因为我刚出来。

附加信息:目前,我个人使用的是 Mercurial,但该项目可能会转移到 StarTeam,除非我能为其他东西提出一些令人信服的论据。

0 投票
18 回答
265752 浏览

c++ - 何时使用动态库与静态库

在 C++ 中创建类库时,您可以在动态 ( .dll, .so) 和静态 ( .lib, .a) 库之间进行选择。它们之间有什么区别,什么时候适合使用?

0 投票
3 回答
2249 浏览

c++ - Unable to link to shared library

I'm building a shared library with g++ 3.3.4. I cannot link to the library because I am getting

Which c++filt describes as

I thought this might have come from using hash_map, but I've taken that all out and switched to regular std::map. I am using g++ to do the linking, which is including -lstdc++.

Does anyone know what class would be instantiating this template? Or even better, which library I need to be linking to?

EDIT: After further review, it appears adding the -frepo flag when compiling has caused this, unfortunately that flag is working around gcc3.3 bug.

0 投票
4 回答
6740 浏览

linux - 在 Linux 上使用 C++ 的 DLL-s

我试图找到如何使用谷歌在 linux 上创建 DLL-s,但得到的信息非常混乱。

是否可以在 linux 上编写动态链接库?如果没有,是否有其他方法可以从多个正在运行的程序中调用另一个模块中的代码?

0 投票
4 回答
60860 浏览

xcode - 如何使用 Xcode 创建动态库 (dylib)?

我在 Xcode 中构建了一些命令行实用程序(纯 C,没有 Cocoa)。我希望他们所有人都使用我定制的 libpng 版本,并且我想通过在所有可执行文件之间共享一个库的副本来节省空间(我不介意.dylib与它们一起重新分发)。

我需要做一些魔术来获取 libpng 导出符号吗?

“Link Binary With Libraries”是否静态构建阶段链接?

Apple 的文档提到在运行时加载库dlopen,但是我如何让 Xcode 创建可执行文件而不抱怨缺少符号?


我想我已经弄清楚了:

  • libpng 没有正确链接,因为我已经构建了 32/64 位可执行文件和 32 位库。库和可执行文件的构建设置必须匹配。

  • libpng 的 config.h 需要有大量的定义,例如#define FEATURE_XXX_SUPPORTED

  • “Link Binary With Libraries”构建阶段可以很好地处理动态库,并且DYLD_FALLBACK_LIBRARY_PATH环境变量对于.dylib从应用程序包加载 s 是必需的。

0 投票
4 回答
1862 浏览

linux - linux上的共享库问题

我正在尝试在 linux 系统上编译/链接一个非常旧的软件,但由于某种原因,我无法与安装在我的系统上的共享库链接。

我从链接器收到以下错误:

但是,lib 本身已安装。如果我跑

我得到(除其他外)这个打击:

该库及其链接位于 /usr/lib 顺便说一句。所以没什么特别的。

所以图书馆就在那里,ldconfig 找到了它。什么会导致 ld 在链接时找不到库?正如您可能已经猜到的那样,我对共享库的东西很陌生。

有任何想法吗?

0 投票
3 回答
19290 浏览

c++ - 对于不遵循 libNAME.so 命名约定的库,如何在没有 -l 或硬编码路径的情况下使用 GCC 链接?

我有一个共享库,我希望使用 GCC 链接可执行文件。共享库的名称不是 libNAME.so 形式的非标准名称,因此我不能使用通常的 -l 选项。(它恰好也是一个 Python 扩展,因此没有“lib”前缀。)

我可以将库文件的路径直接传递给链接命令行,但这会导致库路径被硬编码到可执行文件中。

例如:

有没有办法链接到这个库而不导致路径被硬编码到可执行文件中?

0 投票
2 回答
997 浏览

gcc - gcc 链接器问题

我正在尝试制作一个包装 libpurple 的库(您无需了解有关 libpurple 的任何信息即可在此处提供帮助)。Libpurple 反过来加载“插件”,这些“插件”只是通过 dlopen 之类的东西访问的 .so。这些插件依次回调 libpurple 中的函数。

我可以很好地构建我的库,但是当它调用适当的 libpurple init 函数并且 libpurple 尝试加载插件时,我收到如下错误:

符号查找错误:/usr/local/lib/purple-2/autoaccept.so:未定义符号:purple_user_dir

Purple_user_dir 是 libpurple 中定义的函数。当我构建一个链接到 libpurple 的程序(不是库)时,没有问题。我试过使用 -export-dynamic ,但这似乎没有帮助。这是我的构建命令:

谢谢。

0 投票
2 回答
4230 浏览

c++ - GCC 和 ld 找不到导出的符号……但它们在那里

我有一个 C++ 库和一个 C++ 应用程序,试图使用从库中导出的函数和类。该库构建良好,应用程序编译但无法链接。我得到的错误遵循这种形式:

app-source-file.cpp:(.text+0x2fdb): undefined reference to `lib-namespace::GetStatusStr(int)'

链接器似乎可以很好地解析库中的类,但是自由函数和导出的数据(如余弦查找表)总是会导致上述错误。

我使用的是 Ubuntu 8.04 (Hardy),它是最新的 Ubuntu 软件包。

链接库的命令是(删除了其他库):

链接应用程序的命令是(删除了其他库):

最后,似乎(据我所知)有问题的符号正在正确导出: