gpt4 book ai didi

c - 静态链接会产生 Segmentation Fault 错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:40:38 25 4
gpt4 key购买 nike

我在静态链接我的 C 应用程序时遇到问题。所有库都存在 (.a),就在一个月前,我能够毫无错误地静态链接我的应用程序。但是一旦我在 eclipse 中激活静态链接选项,我就可以编译而不会出错,但是当我尝试运行它时,我收到一个“段错误”并且它停止了。

我尝试调试,这就是 eclipse 向我展示的内容:

No source available for "_start() at 0x4017f7"
No source available for "__libc_start_main() at 0x522389"
No source available for "__libc_csu_init() at 0x5228f7"
No source available for "frame_dummy() at 0x4018bd"
No source available for "__register_frame_info_bases() at 0x52194b"
No source available for "0x0"

我使用以下库:-lgcrypt -lgpg-error -lmxml -lpthread -lrt。任何想法可能是什么问题?我也可以发布 gdb 跟踪,但它很长。

链接器命令:调用:调用:GCC C 链接器gcc -static -o “X - 客户端” ./src/lib/stopwatch-0.2/stopwatch.o ./src/lib/rscode-1.3/berlekamp.o ./src/lib/rscode-1.3/crcgen.o ./src/lib/rscode-1.3/galois.o ./src/lib/rscode-1.3/rs.o ./src/lib/Salsa20/ecrypt.o ./src/lib/helper-Client.o ./src/PoR-Client.o -lgcrypt -lgpg-error -lmxml -lpthread -lrt完成构建目标:X - 客户端

最佳答案

这可能不是链接的问题。您可能在读取未初始化的内存或读取和写入数组末尾时遇到问题。

在这种情况下发生的情况是,在一个构建中,您正在读取的内存恰好被设置为一个非崩溃值(例如,您读取了一个数组的末尾到一个有零的区域),但随后另一个构建数据结构的顺序不同,现在您正在读取具有意外值的内容。

或者您可以在一个构建中将末尾写入您不再需要的数据结构中,而在这个构建中,超出数组末尾的内容至关重要。

同时检查您的程序在调试版本和优化版本上的运行是否不同。优化改变了数据结构的布局、填充和初始化。 (例如,调试版本通常会将所有内存归零,并且堆栈帧会用调试数据填充)。

我强烈建议您通过 valgrind 等工具运行您的程序。它会为您找到这些类型的问题。

关于c - 静态链接会产生 Segmentation Fault 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26972547/

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