Linux 使用g+编译静态库+;
我有三个类-我用Linux 使用g+编译静态库+;,linux,Linux,我有三个类-我用第一类,第二类,第三类来表示它们。 我的头-firstClass.h,secondClass.h,thirdClass.h和源firstClass.cpp,secondClass.cpp,thirdClass.cpp。 在classthirdClass中,我创建了firstClass的实例和secondClass的两个实例。 在main.cpp中,我取消监视并创建实例thirdClass 我想创建thirdclass的静态库,并链接到main.cpp。 firstClass和th
第一类
,第二类
,第三类
来表示它们。
我的头-firstClass.h
,secondClass.h
,thirdClass.h
和源firstClass.cpp
,secondClass.cpp
,thirdClass.cpp
。
在classthirdClass
中,我创建了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 first class.o secondClass.o third class.o
g++main.cpp-L.-lLearning-lm-o MnLearning.o-m32
在MnLearning[5574bd4f2000+26000]中,557400000045 ip 000055774BD509DCD sp 00007ffd9e887900出现错误4
错误肯定在您自己的源代码中。避免在里面,并且要小心
您对的使用很奇怪,可能是错误的。我建议删除它(如果您的计算机和发行版是64位的,首先删除-m32
标志;首先让程序在笔记本电脑上正确运行,然后通过添加-m32
标志将其移植到32位Linux)。您可以使用like-H
来显示包含哪些文件
我建议您使用一些工具(如或)构建库和程序
将构建配置为使用所有警告和调试信息进行编译,即使用g++-Wall-Wextra-g
with。改进您的源代码以避免收到警告。然后了解程序(和库)的行为
那么可能编译是不正确的
不,编译器可能很好,你应该相信它
该错误很可能存在于您自己的代码中。
我的错误:在MnLearning[5574bd4f2000+26000]
是您自己的代码中某个错误的症状(例如,某些缓冲区溢出、某些错误指针取消引用等;或其他类型的错误)
您也可以使用
我花了几个小时检查代码,但没有发现bug
您没有花足够的时间(有些bug可能需要数周的工作才能找到),而且您忘记了使用调试器,这是一个非常方便的工具,可以帮助您了解程序的行为并在其中找到bug。要知道,,不要气馁。如果您有错误,请将其添加到问题中,否则很难知道您实际在问什么。如果您有64位处理器和操作系统,为什么要使用
-m32
?我执行程序的机器有32位处理器和操作系统。然后您最好先自己调试程序(64位)Linux系统,并且只有当它没有明显的系统错误时,才开始将其移植到32位。“可能编译不正确”-作为一般经验法则,您的代码有错误的可能性要比编译器在g++上编译之前出错的可能性大得多。我尝试使用Visual Studio 2017,但我放弃了。也许我应该试试Windows上的代码块?在linux上我是新手。不,继续在linux上工作。它对开发者和学生都非常友好。你只需要更多地了解如何明智地使用它。代码块不是一个编译器,而是一个运行编译命令(并对您隐藏它们)的编译器。您在Linux thru命令上的编译是正确的。谢谢您的回答。昨天我看了一会儿我的代码,但今天我发现了一个错误。再次感谢您的建议和一桶冷水。