Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用g+编译静态库+;_Linux - Fatal编程技术网

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
。 在class
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 first class.o secondClass.o third class.o
  • g++main.cpp-L.-lLearning-lm-o MnLearning.o-m32
  • 编译是正确的,并没有任何错误,但当我执行程序时,我有相同的错误。我花了几个小时检查代码,但没有发现bug。那么可能编译是不正确的。我是用网络上的一些教程来做这件事的。 如果有什么不清楚的地方,我愿意进一步解释我的问题

    编辑:我的错误:
    在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命令上的编译是正确的。谢谢您的回答。昨天我看了一会儿我的代码,但今天我发现了一个错误。再次感谢您的建议和一桶冷水。