gpt4 book ai didi

c++ - 在 Linux 上使用 g++ 链接静态英特尔 IPP 库时出现问题

转载 作者:太空狗 更新时间:2023-10-29 12:22:17 26 4
gpt4 key购买 nike

我一直在尝试将一个项目从 Xcode 转移到 Linux(目前是 Ubuntu x86,但希望静态链接的可执行文件能够在 x86 CentOS 机器上运行?我希望如此?)。我编译了整个项目,但它在链接阶段失败了——它为我提供了 IPP 定义的所有函数的 undefined reference 。这可能是一件非常小而愚蠢的事情,但我已经为此苦苦思索了几天,但我无法让它发挥作用。

这是编译语句(我还有一个生成相同错误的生成文件):

g++ -static /opt/intel/ipp/6.0.1.071/ia32/lib/libippiemerged.a /opt/intel/ipp/6.0.1.071/ia32/lib/libippimerged.a /opt/intel/ipp/6.0.1.071/ia32/lib/libippsemerged.a /opt/intel/ipp/6.0.1.071/ia32/lib/libippsmerged.a /opt/intel/ipp/6.0.1.071/ia32/lib/libippcore.a -pthread -I /opt/intel/ipp/6.0.1.071/ia32/include -I tools/include -o main main.cpp pick_peak.cpp get_starting_segments.cpp get_segment_timing_differences.cpp recast_and_normalize_wave_file.cpp rhythm_score.cpp pitch_score.cpp pitch_curve.cpp tools/source/LocalBuffer.cpp tools/source/wave.cpp distance.cpp

...这是一长串链接器错误的开头:

./main.o: In function `main':
main.cpp:(.text+0x13f): undefined reference to `ippsMalloc_16s'
main.cpp:(.text+0x166): undefined reference to `ippsMalloc_32f'
main.cpp:(.text+0x213): undefined reference to `ippsMalloc_16s'

有什么想法吗? FWIW,这些是我的 Xcode 项目中的 IPP 依赖项,可以毫无问题地构建、链接和运行:“-lippiemerged”,“-lippimerged”,“-lippemerged”,“-lippsmerged”,“-唇核”,

谢谢!

最佳答案

您的链接问题可能是由于您的链接行完全向后:存档库应该在命令行上在源文件和目标文件之后,而不是在它们之前。要了解顺序的重要性,请阅读 this .

另请注意,在 Linux 上,静态链接的可执行文件的可移植性明显低于动态链接的可执行文件。通常,如果您在较旧的 Linux 系统上动态链接系统库,它将在所有较新的系统上运行(我使用古老的 RedHat 6.2,并且我还没有看到我的可执行文件无法在其上运行的系统)。对于完全静态的可执行文件,情况并非如此;当移动到具有与它们所链接的系统不同的 libc 的系统时,它们可能会以各种“有趣”的方式崩溃。

关于c++ - 在 Linux 上使用 g++ 链接静态英特尔 IPP 库时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/508441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com