我有3个课程 - 我用firstClass
,secondClass
,thirdClass
来表示这些课程。
我的标题 - firstClass.h
,secondClass.h
,thirdClass.h
和来源firstClass.cpp
,secondClass.cpp
,thirdClass.cpp
。
在课程thirdClass
中,我创建了firstClass
的实例和secondClass
的两个实例。
在main.cpp
我解构并创建实例thirdClass
。
我想创建thirdclass
的静态库并链接到main.cpp
。
firstClass
和thirdClass
使用了相同的库libm.a
我按照以下步骤逐步创建了库:
g++ -c -I-/usr/include/ -I-/usr/lib/ -I-/home/projects/Learninig firstClass.cpp -lstdc++ -lm-o WsChannel.o -w -m32
g++ -c -I-/usr/include/ -I-/usr/lib/ --I-/home/projects/Learninig secondClass -lstdc++ -o secondClass.o -w -m32
g++ -c -I-/usr/include/ -I-/usr/lib/ --I-/home/projects/Learninig thirdClass.cpp -lstdc++ -lm -o thirdClass.o -w -m32
ar rcs libLearning.a firstClass.o secondClass.o thirdClass.o
g++ main.cpp -L. -lLearning -lm -o MnLearning.o -m32
正确编译没有任何错误,但是当我执行程序时,我有同样的错误。我花了几个小时检查代码,但我没有发现错误。那么编译可能不正确。我在网上使用了一些教程。 如果不清楚的话,我准备更多地解释我的问题。
编辑:我的错误:
segfault at 557400000045 ip 00005574bd509dcd sp 00007ffd9e887900 error 4 in MnLearning[5574bd4f2000+26000]
答案 0 :(得分:1)
错误肯定在您自己的源代码中。避免使用undefined behavior,并且是UB的scared。
您对-I-
的使用很奇怪,可能是错误的。我建议删除它(如果你的计算机和发行版是64位,首先删除-m32
标志;首先让你的程序在你的笔记本电脑上正确运行,然后再将它移植到32位Linux -m32
标志。您可以使用preprocessor options之类的-H
来显示包含的文件。
我建议使用build automation或GNU make等ninja工具构建您的库和您的程序。
将您的构建配置为使用所有警告和调试信息进行编译,即使用g++ -Wall -Wextra -g
和GCC。改进您的源代码以获得警告。然后use the gdb
debugger了解程序(和库)的行为。
那么编译可能不正确。
不,编译器可能很好,你应该相信它。
该错误很可能出现在您自己的代码中。
我的错误:段错误557400000045 ip 00005574bd509dcd sp 00007ffd9e887900 MnLearning中的错误4 [5574bd4f2000 + 26000]
Segmentation fault是您自己的代码中某些错误的症状(例如,某些缓冲区溢出,某些错误的指针取消引用等;或其他类型的UB)。
您也可以使用valgrind。
我花了几个小时检查代码,但我没有发现错误。
你没有花足够的时间(一些错误可能会花费你数周的工作时间),你忘了使用调试器,这是一个非常方便的工具,可以帮助你理解程序的行为并找到它中的错误。请注意programming is difficult,不要气馁。