Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.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
C++ 在Linux(而不是OSX)中链接时发生库冲突_C++_Linux_Macos_Gdb_Linker Errors - Fatal编程技术网

C++ 在Linux(而不是OSX)中链接时发生库冲突

C++ 在Linux(而不是OSX)中链接时发生库冲突,c++,linux,macos,gdb,linker-errors,C++,Linux,Macos,Gdb,Linker Errors,我已经在我的OSX笔记本电脑上成功地编译和执行了一些代码,现在正试图将该项目转移到运行Scientific Linux的HPC上 代码似乎可以正确编译和链接,但当我运行可执行文件时,它会中止: 在抛出“H5::DataSpacieException”实例后调用terminate 中止(堆芯转储) 我在程序的第一行应该执行的地方放了一个print语句,但是这一行永远不会到达,也就是说,程序在第一行执行之前就被终止了 我已经将问题隔离到特定的库中,即在没有库的情况下编译时,所有功能都可以工作(除了依

我已经在我的OSX笔记本电脑上成功地编译和执行了一些代码,现在正试图将该项目转移到运行Scientific Linux的HPC上

代码似乎可以正确编译和链接,但当我运行可执行文件时,它会中止:

在抛出“H5::DataSpacieException”实例后调用terminate
中止(堆芯转储)

我在程序的第一行应该执行的地方放了一个print语句,但是这一行永远不会到达,也就是说,程序在第一行执行之前就被终止了

我已经将问题隔离到特定的库中,即在没有库的情况下编译时,所有功能都可以工作(除了依赖库的临时删除的函数)。包含库时,它会编译,但会如上所述中止。我已经将同一个库链接到其他使用它的可执行文件上,没有问题:是否与我链接到的其他库存在冲突

我对C++非常陌生,对这种调试也很陌生。以下是程序中止时gdb的回溯:

#0  0x00002aaaad82a1f7 in raise () from /lib64/libc.so.6
#1  0x00002aaaad82b8e8 in abort () from /lib64/libc.so.6
#2  0x00002aaaad337ac5 in __gnu_cxx::__verbose_terminate_handler() () from /lib64/libstdc++.so.6
#3  0x00002aaaad335a36 in ?? () from /lib64/libstdc++.so.6
#4  0x00002aaaad335a63 in std::terminate() () from /lib64/libstdc++.so.6
#5  0x00002aaaad335c83 in __cxa_throw () from /lib64/libstdc++.so.6
#6  0x00000000020ec521 in H5::DataSpace::getConstant() ()
#7  0x0000000000da8dff in _GLOBAL__sub_I_H5DataSpace.cpp ()
#8  0x00000000024ecdcd in __libc_csu_init ()
#9  0x00002aaaad816b95 in __libc_start_main () from /lib64/libc.so.6
#10 0x0000000000dab7a7 in _start ()
(gdb)
我真的不知道从哪里开始解释这个。我想把它与我笔记本电脑上工作版本的回溯进行比较。如果我在main中设置了一个断点(我知道它在Linux版本中不会执行),请运行并打印一个回溯:

* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
  * frame #0: 0x0000000100003490 antsRegistration`ants::antsRegistration(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, std::__1::basic_ostream<char, std::__1::char_traits<char> >*)
frame #1: 0x000000010000306e antsRegistration`main + 62
frame #2: 0x00007fff5abc3115 libdyld.dylib`start + 1
*线程#1,队列='com.apple.main thread',停止原因=断点1.1
*帧#0:0x0000000100003490 antsRegistration`ants::antsRegistration(std::_1::vector,std:_1::basic_ostream*)
帧#1:0x000000010000306e antsRegistration`main+62
帧#2:0x00007fff5abc3115 libdyld.dylib`start+1

实际上,这看起来更像源代码,但不能帮助我识别任何差异。欢迎在此提供任何见解或调试策略。

我在将OpenGL程序从OSX移植到Windows时遇到类似问题。OSX只是做了一些不同的事情,至少在OpenGL世界是这样。最后,根据编译的目标,我不得不进行OSX并赢得特定的函数调用

如果我有这个问题,我会检查在“错误”库中实现的函数,也许会逐一介绍它们,并试图找出哪个调用造成了损害。在独立于主程序的情况下执行此操作-我的意思是在一个单独的最小程序中,在该程序中完全明显没有发生其他副作用


这样,您就可以更好地了解有问题的一个或多个特定函数(如果仍然需要,也可以针对一个非常具体的问题)。

正在调用构造函数中的代码。可能与OSX上的顺序不同。@斯塔克,但仅限于静态对象的实例化,对吗?H5::DataSpace::getConstant是什么?首先,如果在main之前调用的只是静态对象的实例化,则此类构造函数中的错误与平台无关;但是我的代码是在macosx上编译的;我不知道,hdf5库中的一些函数。它失败,引发异常,未正确处理,程序终止。然而,有问题的库根本不直接使用任何hdf5函数。