问题标签 [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 投票
2 回答
827 浏览

android - 如何将 sqlite 静态链接到我的 android 应用程序?

由于影响与 Android < 2.2 捆绑的动态库的错误,我需要将 SQLite 的 3.6.2 版本与我的 android 应用程序静态链接。我已经在我的开发机器上编译并安装了 3.6.2,但我不确定如何将它链接到我的 Android 应用程序(使用 Eclipse 开发)。

我不熟悉构建和编译选项,所以如果有人可以逐步指导我,将不胜感激。

0 投票
3 回答
1151 浏览

x11 - 为什么静态 X11 应用程序在其他机器上失败?

我在 32 位 Fedora Core 9 机器上静态构建了 X11R5 库。然后我构建了一个使用 X11 并静态链接它的应用程序。到目前为止,一切都很好。ldd 报告它是一个静态链接的应用程序。我可以在本地运行它就好了。但是当我将它复制到 64 位 FC9 机器上时,它会失败,如下所示:

assistant.static:xcb_io.c:228:_XSend:断言`!dpy->xcb->request_extra'失败。
中止

当我运行 strace 时,它​​似乎试图打开 libXfixes.so:

我不明白为什么静态链接的应用程序会尝试打开共享的 X 库。不应该通过静态链接包含运行应用程序所需的所有内容(当然,应用程序进行的任何 Linux 系统调用除外,这些调用需要在外部处理)。

感谢您的任何解释!

0 投票
1 回答
6320 浏览

c++ - 为什么我的静态库这么大?

我有一个 C++ 编译的静态库,其中包含大约 15 个类及其成员函数和内容,并且编译后几乎有 14 兆字节。它链接到谷歌的密集哈希表库和 MPIR,这就像 Windows 的 GMP,但我在一个普通的 exe 中完成了它,它只有几千字节。为什么它如此庞大?我能做些什么来减小它的大小?似乎还有其他程序比我的要复杂得多,但要小得多。

使用 Visual C++ 编译,命令行为:

0 投票
2 回答
1524 浏览

c++ - 静态链接 GLU?

我正在使用 GLUTess 来细分多边形。经过几次测试,我意识到链接到glu32.dll的glu32.lib每隔一段时间就会崩溃。而我从 opengl sdk 获得的 GLU 却是坚如磐石。不幸的是,由于没有链接到 windows dll,这意味着我需要在我的应用程序中拖动 GLU.dll,而不是依赖于 Windows 的 GLU32.dll。是否有可静态链接的 GLU 版本?我真的不希望他的小项目有任何 dll 依赖项。

谢谢

我的镶嵌器代码:

这里有什么问题吗?

0 投票
4 回答
2573 浏览

c++ - 将dll转换为lib以进行静态链接?

有没有一种免费的方法来静态链接一个 dll?我试过 dll 到 lib 但 999 美元太贵了。什么是替代品,因为我想要 1 个不错的 exe 而不是 1 个 exe + 1 个 DLL。

谢谢

0 投票
1 回答
198 浏览

qt - 如何将图像捆绑到我的静态 QT 应用程序中?

我正在构建一个工具,其中包含一些 .bmp 图标图像。当我静态构建应用程序时,图像必须放在应用程序的文件夹中才能运行,这首先违背了拥有静态应用程序的目的。有没有办法在构建过程中将图像滚动到应用程序中?

0 投票
6 回答
42174 浏览

linux - Linux静态链接死了?

事实上, Linux 上的-static gcc 标志现在不起作用。让我引用 GNU libc 常见问题解答:

2.22。即使是静态链接的程序也需要一些我无法接受的共享库。我能做些什么?

{AJ} NSS(有关详细信息,只需键入 `info libc "Name Service Switch"')在没有共享库的情况下将无法正常工作。NSS 允许通过更改一个配置文件 (/etc/nsswitch.conf) 来使用不同的服务(例如 NIS、文件、db、hesiod),而无需重新链接任何程序。唯一的缺点是现在静态库需要访问共享库。这由 GNU C 库透明地处理。

一种解决方案是使用 --enable-static-nss 配置 glibc。在这种情况下,您可以创建一个仅使用服务 dns 和文件的静态二进制文件(为此更改 /etc/nsswitch.conf)。您需要明确链接所有这些服务。例如:

这种方法的问题在于,您必须将每个使用 NSS 例程的静态程序与所有这些库链接起来。
{UD} 事实上,不能再说使用此选项编译的 libc 正在使用 NSS。没有开关了。因此强烈 建议不要使用 --enable-static-nss,因为这会使系统上程序的行为不一致。

关于这个事实,现在是否有任何合理的方法可以在 Linux 上创建功能齐全的静态构建,或者静态链接在 Linux 上完全死了?我的意思是静态构建:

  • 行为与动态构建完全相同(行为不一致的静态nss是邪恶的!);
  • 适用于 glibc 环境和 Linux 版本的合理变化;
0 投票
0 回答
2437 浏览

android - 将fftw3静态链接到共享库

我正在开发一些适用于 Android 的音高校正软件,我希望使用 NDK 让 fftw3 在 Android 上工作。

音高校正库(talentedhack,http://code.google.com/p/talentledhack/以防万一有人想知道)依赖于 fftw3,所以我尝试将 fftw3 编译为静态库,然后将其链接到共享的有才华的黑客图书馆。目前我已经将 fftw3 构建为静态库 libfftw3.a,但我不断收到类似这样的未解决的参考错误

使用 ndk-build 编译有才华的黑客共享库时。不过,它似乎正确地拾取了文件,这令人费解。

我的 Android.mk 文件的相关部分如下所示:

从项目顶层调用 ndk-build 时失败的命令是:

/opt/android-ndk-linux/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/arm-eabi-gcc -nostdlib -Wl,-soname,libtalentedhack.so -Wl,-shared,-Bsymbolic /path/to/project/bin/ndk/local/armeabi/objs/talentedhack/circular_buffer.o /path/to/project/bin/ndk/local/armeabi/objs/talentedhack/fft.o /path/to/project/bin/ndk/local/armeabi/objs/talentedhack/formant_corrector.o /path/to/project/bin/ndk/local/armeabi/objs/talentedhack/lfo.o /path/to/project/bin/ndk/local/armeabi/objs/talentedhack/pitch_detector.o /path/to/project/bin/ndk/local/armeabi/objs/talentedhack/pitch_shifter.o /path/to/project/bin/ndk/local/armeabi/objs/talentedhack/pitch_smoother.o /path/to/project/bin/ndk/local/armeabi/objs/talentedhack/quantizer.o /path/to/project/ndk/local/armeabi/objs/talentedhack/talentedhack.o -Wl,--whole-archive -Wl,--no-whole-archive /path/to/project/bin/ndk/local/armeabi/libfftw3.a /opt/android-ndk-linux/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/../lib/gcc/arm-eabi/4.4.0/libgcc.a /opt/android-ndk-linux/build/platforms/android-8/arch-arm/usr/lib/libc.so /opt/android-ndk-linux/build/platforms/android-8/arch-arm/usr/lib/libstdc++.so /opt/android-ndk-linux/build/platforms/android-8/arch-arm/usr/lib/libm.so -Wl,--no-undefined -Wl,-z,noexecstack -L/opt/android-ndk-linux/build/platforms/android-8/arch-arm/usr/lib -llog -Wl,-rpath-link=/opt/android-ndk-linux/build/platforms/android-8/arch-arm/usr/lib -o /path/to/project/bin/ndk/local/armeabi/libtalentedhack.so

我不确定这是否是 fftw3 的问题,因为我遵循了他们关于移植的说明(获取源文件的子集,手动配置并构建它们),因为系统实际上没有 fftwf_execute 或任何由于使用了一些花哨的宏,或者如果 Android NDK 构建系统无法正确处理静态库,则在任何头文件中定义的其他函数(我可以告诉)。任何帮助都将不胜感激。

0 投票
3 回答
3604 浏览

c++ - Boost 自动链接库不是由 Boost 构建的,但预期的库是构建的

我正在开发一个可以通过编写 python 脚本来扩展的数学应用程序。

我正在使用 Qt 4.6.3(构建为静态库,调试和发布版本)和 Boost 1.43.0(构建为静态库,运行时链接也设置为静态,多线程版本,调试和发布)。一切都是用 MSVC++2008 构建的。Boost 构建了以下库:

  • libboost_python-vc90-mt-s-1_43.lib
  • libboost_python-vc90-mt-s.lib
  • libboost_python-vc90-mt-sgd-1_43.lib
  • libboost_python-vc90-mt-sgd.lib

我的项目编译,但在链接阶段出现以下错误:

为什么它不选择我编译的库之一?

我认为库名称中的 s 代表静态,但是自动链接功能似乎选择了一个动态库,我希望它全部静态链接到一个可执行文件中。

正则表达式库也是如此:我编译了相同的 4 个正则表达式库,快速测试显示此链接错误:

该怎么办?

0 投票
2 回答
2202 浏览

mfc - 将 BOOST 1.35 升级到 1.43 会导致 __pRawDllMain 的链接器错误(mfc 相关)

在工作中,我们有一个使用 1.35 构建良好的 MFC 扩展 DLL,但使用 1.43 构建时会导致以下错误:

如果我激活 BOOST_LIB_DIAGNOSTIC 旧的构建列表:

所以没有改变与哪个库链接

完整的错误信息是:

我在两个库版本中对 tss_pe.cpp 做了一个差异,它们是相同的,所以我不确定问题是什么。

您可以通过定义让消息消失,BOOST_THREAD_USE_DLL但是我们需要发送 BOOST_THREAD-VC71-MT-GD-1_43.DLL 所以我认为这不是最好的解决方案。