Tag: 链接器

Windows的ldd相当于什么?

Windows的ldd相当于什么?

错误LNK2005:xxx已经在MSVCRT.lib中定义(MSVCR100.dll)C:\ something \ LIBCMT.lib(setlocal.obj)

我正在使用DCMTK库来读取Dicom文件(医学image processing中使用的图像格式)。我在编译此DCMTK源代码时遇到了问题。 DCMTK使用一些额外的外部库(zlib,tiff,libpng,libxml2,libiconv)。 我知道所有库都应该使用相同的代码生成选项生成。 我已经下载了用“Multithreaded DLL”运行时选项(/ MD)编译的这些支持库的编译版本。 在DCMTK源代码的每个项目中,我确保运行时选项是“multithreadingDLL”(/ MD)。 但是我仍然得到这些错误: Error 238 error LNK2005: ___iob_func already defined in MSVCRT.lib(MSVCR100.dll) C:\dcmtk-3.5.4-src\CMakeBinaries\dcmpstat\apps\LIBCMT.lib(_file.obj) dcmp2pgm Error 239 error LNK2005: __lock_file already defined in MSVCRT.lib(MSVCR100.dll) C:\dcmtk-3.5.4-src\CMakeBinaries\dcmpstat\apps\LIBCMT.lib(_file.obj) dcmp2pgm Error 240 error LNK2005: __unlock_file already defined in MSVCRT.lib(MSVCR100.dll) C:\dcmtk-3.5.4-src\CMakeBinaries\dcmpstat\apps\LIBCMT.lib(_file.obj) dcmp2pgm Error 241 error LNK2005: __initterm_e already defined in MSVCRT.lib(MSVCR100.dll) C:\dcmtk-3.5.4-src\CMakeBinaries\dcmpstat\apps\LIBCMT.lib(crt0dat.obj) dcmp2pgm Error […]

在C中共享全局variables

我如何创build在C中共享的全局variables? 如果我把它放在一个头文件中,那么链接器会抱怨variables已经被定义了。 是唯一的方法来声明我的一个C文件中的variables,并手动把extern的所有其他C文件的顶部想要使用它? 这听起来并不理想。

在C ++中使用double包含警卫

所以我最近在一个讨论中,我在哪里工作,在那里我质疑使用一个单一的后卫一个双重的后卫。 我的意思是双重后卫如下: 头文件“header_a.hpp”: #ifndef __HEADER_A_HPP__ #define __HEADER_A_HPP__ … … #endif 将头文件包含在头文件或源文件中时: #ifndef __HEADER_A_HPP__ #include "header_a.hpp" #endif 现在我明白,在头文件中使用guard是为了防止多个包含已经定义的头文件,这是常见的和有据可查的。 如果macros已经被定义,整个头文件被编译器视为“空白”,并且阻止了双重包含。 很简单。 我不明白的问题是在#include "header_a.hpp"周围使用#ifndef __HEADER_A_HPP__和#endif 。 同事告诉我,这为夹杂物增加了第二层保护,但是如果第一层绝对地完成了工作(或者是做了这个工作),我看不出第二层如何是有用的。 我能想到的唯一好处就是它彻底阻止了连接器无法find文件。 这是否意味着提高编译时间(这不是提到的好处),还是在这里有其他工作,我没有看到?

什么是编译器,链接器,加载器?

我想深入了解编译器,链接器和加载器的含义和工作。 参考任何语言,最好是c ++。

什么是__gxx_personality_v0?

这是来自操作系统开发网站的第二手问题,但这让我很好奇,因为我无法在任何地方find一个合适的解释。 当使用gcc编译和链接一个独立的C ++程序时,有时会出现这样的链接器错误: out/kernel.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' 这显然是因为这个符号是在libstdc ++中定义的,在独立的环境中缺less这个符号。 解决这个问题只需要在某个地方定义这个符号: void *__gxx_personality_v0; 这是好的,但我不喜欢神奇的工作…所以问题是,这个符号的目的是什么?

错误LNK2038:为'_ITERATOR_DEBUG_LEVEL'检测到不匹配:值'0'与main.obj中的值'2'不匹配

我已经阅读了很多解决我的问题,但没有帮助。 我试图干净,重build。 重新安装visual 2010并从专业改为终极。 但是我仍然不知道为什么我有这个错误。 我的项目是这样的:1 Exe解决scheme来testing我的静态库。 1个DLL解决scheme静态库。 被转换为dll的代码是使用来自1个名为ClassificationFramework的库的函数。 我提供这个库作为标题和CPP,所以基本上是源代码。 在Exe解决scheme中,我链接了我生成的库+一些其他库以运行它+ ClassificationFramework.dll。 一切工作正常,当我使用释放,但当我更改为debugging(因为我想debugging一些东西,我厌倦了在发布模式中跳过debugging器)我得到这个: 2>Link: 2> ClassificationFramework.lib(SampleClass.obj) : MSIL .netmodule or module compiled with /GL found; restarting link with /LTCG; add /LTCG to the link command line to improve linker performance 2>ClassificationFramework.lib(SampleClass.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in […]

为什么在Visual Studio中编译C ++项目时发生致命错误“LNK1104:无法打开文件”C:\ Program.obj“”?

我在Visual Studio 2008中创build了一个新的C ++项目。没有编写代码。 只有项目设置已被更改。 当我编译该项目时,我收到以下致命错误: 致命错误LNK1104:无法打开文件'C:\ Program.obj'

Visual C ++:如何禁用特定的链接器警告?

我正在使用来自CGAL的库,在我的代码编译的链接阶段,会产生很多这种forms的链接警告: warning LNK4099: PDB 'vc80.pdb' was not found with 'gmp-vc80-mt-sgd.lib' or at 'vc80.pdb'; linking object as if no debug info 如何在Visual C ++ / Studio 2008下closures此特定的链接器警告? 请注意,我没有任何控制我正在使用的外部(CGAL)库。 我不能/不想进入重新编译外部库。 因此,需要在我的最后解决消息。

g ++对typeinfo的未定义引用

我只是遇到以下错误(并find解决scheme在线,但它不存在堆栈溢出): (.gnu.linkonce。[stuff]):未定义的引用[方法] [目标文件] 🙁 .gnu.linkonce。[stuff]):未定义的引用`typeinfo for [classname]' 为什么会得到这些“未定义的引用typeinfo”链接器错误之一? (如果你可以解释幕后发生了什么,奖金分数。)