问题标签 [static-linking]

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 投票
1 回答
234 浏览

c# - 你可以静态链接附属程序集吗?

我对卫星程序集的了解不够了解它们的构造,我很好奇是否可以将它们全部静态链接到一个 dll 中并获得与它们没有静态链接时相同的功能:

0 投票
1 回答
98 浏览

c++ - 关于链接和包含不同版本库的问题

如果我有一个可执行文件并且一个库使用另一个库的不同版本,这是否有问题。

例子:

如果我有一个可执行文件:A.exe,它基本上包装并依赖于一个静态库 A.lib

A.exe 和 A.lib 都需要另一个库 B.lib

如果我有这样的情况:

A.lib 库包括 B.lib 版本 1(使用此库中的头文件) A.exe 可执行文件包括 B.lib 版本 2 A.exe 可执行文件链接到 B.lib 版本 2

在什么情况下会出现问题?

谢谢

0 投票
2 回答
2397 浏览

c++ - 混合静态和动态(共享)库?

我正在使用三个不同的库,一个核心(可以编译为静态或 DLL)、图形(可以编译为静态或 DLL - 处理 Ogre)、物理(只能由于许可而编译为静态 - Havok)。然后,项目根据需要使用库的组合。Physics部分依赖于GraphicsCore的某些功能,而Graphics依赖于Core的某些功能。该项目适用于调试和发布中静态链接的所有库。使用Core的动态链接库时出现以下错误图形,但静态链接的物理库。

错误 1 ​​错误 LNK2005: "public: unsigned int __thiscall OgreFW::FwErrorLog::GetError(void)" (?GetError@FwErrorLog@OgreFW@@QAEIXZ) 已在 FwCore_d_dll.lib(FwCore_d.dll) FwHavok_d.lib 中定义

我可以看到错误的含义,但我对如何规避这一点感到困惑。如果我的库像这样相互依赖,并且物理引擎(Havok)的许可只允许静态链接,我是否需要重新考虑我的设计(这是一个大问题:()或者有没有办法解决它?

谢谢

编辑:我已经检查过所有的库都是用MDd编译的

EDIT2:我可以使用/FORCE:MULTIPLE,但这是隐藏问题而不是解决它

EDIT3:为多次编辑道歉。函数GetError()在头文件中定义,如果我将它放在源文件中,链接错误就会消失。这是为什么?

0 投票
1 回答
3804 浏览

mfc - IMPLEMENT_DYNCREATE,“在静态库中使用 MFC”和继承

如果我将项目从在共享 DLL 中使用 MFC 切换到在静态库中使用 MFC,则以下代码将无法编译:

不过,如果我取消注释 DECLARE_DYNCREATE(Test),它会起作用。我在文档中找不到任何内容说基类必须使用 DECLARE_DYNCREATE,或者静态链接或共享链接之间存在差异。

问题是我有一些不使用 DYNCREATE 宏的第三方代码。有谁知道为什么静态链接时要求会有所不同,以及是否有办法解决这个问题而无需使用 DECLARE_DYNCREATE 声明基类?

谢谢。

0 投票
1 回答
10130 浏览

c++ - 使用“未定义的对 `boost::system::get_system_category()' 的引用来链接 boost barfs

我无法静态链接使用 boost 1.35 库的应用程序。我正在使用带有 G++ 4.3.2 的 linux debian Lenny 盒子。没有-static的链接可以顺利进行。

具体来说,

我正在链接 boost_system-mt,它位于我的 /usr/lib 的盒子上。如果我链接到 boost_system (-lboost_system) 的非多线程安全版本,也会发生同样的事情

我在那里找到了未解决的符号

strace 显示链接器打开了库

这是debian中boost的标准包安装,

我确定我错过了一个愚蠢的细节,但我找不到它。有人帮忙吗?

0 投票
7 回答
39905 浏览

linux - 如何告诉 cmake 我希望我的项目静态链接库?

我正在尝试使用 CMake 构建一个基于 OpenCV 的项目,在 Linux 上运行。到目前为止,我的CMakeLists.txt文件看起来像

但这会导致动态链接库。如何链接静态库?

0 投票
2 回答
19528 浏览

linker - CMake:如何生成“尽可能静态”的二进制文件

我想控制在 CMake 中找到/链接到我的二进制文件的库的类型。最终目标是生成“尽可能静态”的二进制文件,即静态链接每个确实有可用静态版本的库。这一点很重要,因为它将在测试期间实现跨不同系统的二进制文件的可移植性。

ATM 这似乎很难实现,因为 FindXXX.cmake 包,或者更准确地说,find_library 命令总是在静态和动态都可用时选择动态库。

关于如何实现此功能的提示 - 最好以优雅的方式 - 将非常受欢迎!

0 投票
2 回答
667 浏览

macos - 如何编译程序以在 Mac 上分发

我正在 OSX 10.6.4 (Snow Leopard) 上开发一个程序,我希望能够在其他英特尔 Mac 上运行编译后的产品,其中一些可能没有安装 XCode。

为了简单起见,我首先编写了一个 Hello World 程序。

如果我将其编译为

我收到以下错误:

我不知道在哪里可以找到这个图书馆。现在,有人提到我不应该在 mac 上静态编译,因为系统共享库应该随处可用(第三方库可以手动链接)。但是,当我尝试在另一台 Mac 上运行这个 Hello World 程序时,我收到以下错误:

那么,如何在 mac 上编译一个程序以便可以分发呢?我没有架构问题,因为我感兴趣的大多数计算机都是英特尔 Mac。

0 投票
3 回答
310 浏览

c - 文本文档和其他文件可以打包成 C 可执行文件吗

我的 C 应用程序依赖于一些文件来复制。这些文件是否包含在可执行文件中而不是作为独立文件?是否必须静态链接?如果重要的话,我正在使用 Eclipse CDT。

0 投票
1 回答
7336 浏览

linux - 将静态库转换为动态链接库的方法

如果我所拥有的库只是一个 *.a 静态库。有没有办法可以将它转换为 *.so 动态链接库?也许使用ld?

我正在使用 SUSE Linux。精灵平台。