gpt4 book ai didi

linux - 段错误 : 0x0000000000000001 in ?? () 试图在 Linux 下编译/链接

转载 作者:IT王子 更新时间:2023-10-29 00:44:00 24 4
gpt4 key购买 nike

我有一套用“C”编写的软件。这通常使用 acc 编译并在 UNIX Solaris 系统上运行,但我的任务是让它在 x86_64 机器上的 Linux 下运行。

我对 gcc 或 Linux 不是特别熟悉,但我已经设法让代码通过最少的更改进行编译,以删除在 Solaris 下不存在的警告。我正在使用以下编译命令(从脚本调用,因此是环境变量):

/usr/bin/gcc -L/tmp/lib -L/tmp/usr/lib -c -fPIC -g -I$WORKING_DIR $INCLUDE $WORKING_DIR/$FILE

然后大部分源代码被放置在共享 (.so) 库中,也通过脚本,使用以下命令:

ld $GLOSS_SUB_DIR/$REL_DIR/obj/$PREFIX*".o" -G -o $GLOSS_SUB_DIR/$REL_DIR/lib/$LIB$NEW_MIN_VER_NO

名为“gsproc”的可执行文件的示例生成文件如下:

CONTROL_NO = $(shell awk 'BEGIN{FS=","} /control/ {printf "%s%s", $$3,$$4} END{}' $$GLOSS_DIR/subenv_list)

CTRL_PATH = $(GLOSS_DIR)/control/$(CONTROL_NO)

OBJECTS = $(CTRL_PATH)/nolib/gsproc.o \
$(CTRL_PATH)/nolib/w_bkg_shared.o

LIBS = -lcontrolw \
-lsharew \
-lsybdb64


gsproc: $(OBJECTS)
gcc -shared -fPIC -o $(TMP_DIR)/gsproc \
-L $(SYBASE)/$(SYBASE_OCS)/devlib \
$(OBJECTS) $(LIBS) -lm -lc –lnsl

我已成功编译并链接所有代码,但现在每个可执行文件在启动时立即崩溃,出现段错误和核心转储。我从 gdb 得到的是:

GNU gdb (GDB) Red Hat Enterprise Linux (7.2-50.el6)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /gloss_env/GLSLAZ_TST2/control/C2.0.0/bin/gsproc...done.
(gdb) run
Starting program: /gloss_env/GLSLAZ_TST2/control/C2.0.0/bin/gsproc

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000001 in ?? ()

因此看起来问题不在于代码本身。大概是我的编译器或链接器选项出了问题。

最佳答案

这个Makefile规则/gcc命令

gsproc: $(OBJECTS)
gcc -shared -fPIC -o $(TMP_DIR)/gsproc \
-L $(SYBASE)/$(SYBASE_OCS)/devlib \
$(OBJECTS) $(LIBS) -lm -lc –lnsl

创建一个名为 gsproc 的共享对象(没有正常的 lib 前缀和 .so 后缀)。可执行文件和库在许多操作系统中是相同的文件格式,副作用是您可以尝试将共享库作为可执行文件运行。但结果通常是你所看到的,瞬间崩溃等。

关于linux - 段错误 : 0x0000000000000001 in ?? () 试图在 Linux 下编译/链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16171540/

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