标签: linker-errors

Visual Studio 2010中的Visual C++中的LNK 2005

我正在尝试编译在MS VS 2010中使用Visual C++ 2005和MFC编写的C++程序.遗憾的是,我在编译期间遇到以下错误:

Error 2 error LNK2005: "public: virtual __thiscall CMemDC::~CMemDC(void)" (??1CMemDC@@UAE@XZ) already defined in CMemDCImpl.obj Project\Project\Project\uafxcwd.lib(afxglobals.obj) Project.
Run Code Online (Sandbox Code Playgroud)

CMemDCImpl有一个头文件,其中包含类CMemDCImpl的所有成员的定义,以及包含其实现的*.cpp文件.请帮我修复此错误.

c++ linker-errors lnk2005

7
推荐指数
1
解决办法
2万
查看次数

CocoaLumberjack错误:找不到符号:_objc_storeStrong

我对iOS开发比较陌生,我正在尝试实现CocoaLumberjack日志记录.

我从https://github.com/robbiehanson/CocoaLumberjack下载了最新的源代码,在我的项目中包含了所需的文件,进行了必要的代码更改,并且得到了下面的运行时链接器错误.

环境是Xcode 4.2 Build 4C199,项目Target设置为Device = iPad,DeploymentTarget = 4.3.该项目最初编写使用保留/释放,所以我离开了原来的来源,不被加入编译器标志"-fobjc弧"为我使用的伐木工人文件:DDFileLogger.m,DDLog.m和DDTTYLogger.m .

控制台输出是:

GNU gdb 6.3.50-20050815 (Apple version gdb-1708) (Fri Sep 16 06:56:50 UTC 2011)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was …
Run Code Online (Sandbox Code Playgroud)

logging linker-errors ios lumberjack

7
推荐指数
2
解决办法
3693
查看次数

MacOSX下与libpng的链接器错误

我正在研究MacOSX 10.7.2和Xcode 4.2.1.我libpng使用端口安装,我试图在我的应用程序中加载PNG图像,但我得到链接器错误:

Undefined symbols for architecture x86_64:
  "_png_create_read_struct", referenced from:
      loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
  "_png_create_info_struct", referenced from:
      loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
  "_png_destroy_read_struct", referenced from:
      loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
  "_png_set_longjmp_fn", referenced from:
      loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
  "_png_init_io", referenced from:
      loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
  "_png_set_sig_bytes", referenced from:
      loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
  "_png_read_png", referenced from:
      loadPngImage(char*, …
Run Code Online (Sandbox Code Playgroud)

macos xcode linker-errors libpng

7
推荐指数
1
解决办法
7362
查看次数

未定义的参考clock_gettime,gcc 4.6和cmake

我在cmake下遇到链接错误,在使用旧版本的gcc编译系统时我没有这个错误.

特定错误是"未定义引用clock_gettime",但-lrt出现在命令行中.

我的gcc版本:

gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Run Code Online (Sandbox Code Playgroud)

cmake版本2.8.5

我在我的CMakeLists.txt文件中通过target_link_libraries包含了所需的"-lrt".我可以看到它出现在make VERBOSE = 1的编译器行中

我已经读过gcc 4.6在命令行上对链接库的位置很挑剔.

我怎样才能为CMake解决这个问题?

编辑:链接线

Linking CXX executable ../bin/obbsd
cd /home/matt/Desktop/Matt/OBBS/Build/server && /usr/bin/cmake -E cmake_link_script \
     CMakeFiles/obbsd.dir/link.txt --verbose=1   
/usr/bin/c++   -g    CMakeFiles/obbsd.dir/Block.cpp.o \
     CMakeFiles/obbsd.dir/BlockFileCache.cpp.o \
      CMakeFiles/obbsd.dir/BlockFileStore.cpp.o \
      CMakeFiles/obbsd.dir/BlockMemoryCache.cpp.o \
      CMakeFiles/obbsd.dir/BlockStore.cpp.o CMakeFiles/obbsd.dir/Config.cpp.o \
      CMakeFiles/obbsd.dir/DeleteBlockSession.cpp.o \
      CMakeFiles/obbsd.dir/mConfigFile.cpp.o …
Run Code Online (Sandbox Code Playgroud)

gcc cmake linker-errors

7
推荐指数
1
解决办法
1万
查看次数

类方法的显式特化 - 已定义的符号

One Definition Rule规定程序应包含每个非内联函数的一个定义.对于模板类的成员,这对我来说并不完全清楚:

 ///////////
 // Tfoo.h
 template<typename T> class A { 
     void foo(){} 
 };

 ///////////
 // intfoo.h
 #include <Tfoo.h>
 template<> class Foo<int> { 
     void foo(); // declaration only
 }; 
 /*inline*/ void Foo<int>::foo(){} // definition

 ///////////
 // X.cpp
 #include <intfoo.h>

 ///////////
 // Y.cpp
 #include <intfoo.h>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,clientX.obj和clientY.obj都有一个定义Foo<int>::foo.链接器抱怨此符号定义不止一次:

Y.obj : error LNK2005: "private: void __thiscall Foo<int>::foo(void)" 
(?foo@?$Foo@H@@AAEXXZ) already defined in X.obj
Run Code Online (Sandbox Code Playgroud)

当我在前面inline定义时Foo<int>::foo(),一切顺利,链接器很高兴.当我在单独的编译单元中定义它们时(例如intfoo.cpp).

(注意:此解决方案在/sf/answers/103725751/中提出)

可能是一种误解,但模板类的成员函数总是"内联"?这里的规则是什么?

c++ templates linker-errors one-definition-rule explicit-specialization

7
推荐指数
1
解决办法
1796
查看次数

Iphone - 设备 - 链接器错误

我已将libpng添加到我的应用程序中.如果我为模拟器构建,一切都很好.当我为设备构建应用程序时,我收到链接器错误:

    Undefined symbols for architecture armv7: "_png_init_filter_functions_neon", referenced from: _png_read_filter_row in libpng-arm7-release.a(pngrutil.o)
Run Code Online (Sandbox Code Playgroud)

我已经从源手动构建了libpng,对于模拟器和设备也是如此(只有更改了编译目标).我试图找到这个问题,但似乎没有人发布有关此问题的任何内容.

objective-c linker-errors libpng

7
推荐指数
1
解决办法
4157
查看次数

使用v110_xp时链接器错误:"无法打开文件",5.01'"

我建立了一些的Visual C++ DLL和EXE项目与Visual Studio 2012年当默认的平台工具集建筑V110构建成功,但与Windows XP兼容的平台工具集构建时v110_xp失败,并在每个项目下面的链接器错误:

链接:致命错误LNK1104:无法打开文件',5.01'

需要注意的是,如果我改变从平台的Win32x64时错误更改为:

链接:致命错误LNK1104:无法打开文件',5.02'

通过在Visual Studio中的"空项目"模板中创建一个新的EXE项目并添加一些*.cpp文件定义,可以轻松地重现这一点int main() {return 6;}.它将成功构建,直到您将平台工具集从v110更改v110_xp.

为什么会发生这种情况?如何在Windows XP兼容性下成功构建这些项目?

linker-errors visual-c++ visual-studio-2012

7
推荐指数
1
解决办法
5446
查看次数

CLC Builder中的"[ilink32]致命:内存不足"

在将Embarcadero C++ Builder更新到新版本后,我们的项目突然无法构建.这只发生在我们的一个项目中.对于大多数团队成员而言,相同的代码构建没有错误.在我的计算机上,每次都会失败.

在构建选项卡中:

[ilink32] Fatal: Out of memory
Run Code Online (Sandbox Code Playgroud)

在输出选项卡中:

Build FAILED.
c:\program files (x86)\embarcadero\studio\18.0\Bin\CodeGear.Cpp.Targets(3517,5): error : Fatal: Out of memory
Run Code Online (Sandbox Code Playgroud)

没有更多信息.

如果我启用动态RTL链接,项目链接没有错误.例如,如果我们的Debug目标启用了该设置,则项目将在Debug中链接,但不在Release中.

我该如何解决这个问题?如何为链接器提供更多内存?

c++ c++builder out-of-memory linker-errors

7
推荐指数
1
解决办法
3151
查看次数

在Visual Studio中从asm调用C标准库函数

我在Visual Studio中创建的asm项目调用C函数时遇到问题(Win10 x64,Visual Studio 2015).项目由一个asm文件组成:

.586
.model flat, stdcall
option casemap:none
includelib msvcrt.lib

ExitProcess PROTO return:DWORD
extern printf:near

.data
text BYTE "Text", 0

.code
main PROC
    push offset text
    call printf
    add esp,4
    invoke ExitProcess,0
main ENDP
end main
Run Code Online (Sandbox Code Playgroud)

当我构建项目时,链接器输出错误:

错误LNK2019未解析的函数_main @ 0中引用的外部符号_printf

链接器输出参数:

/OUT:"C:\Users\apple\Documents\SP_Lab7\Debug\SP_Lab7_Demo.exe"/ MANIFEST:NO/NXCOMPAT /PDB:"C:\Users\apple\Documents\SP_Lab7\Debug\SP_Lab7_Demo.pdb"/ DYNAMICBASE "kernel32.lib""user32.lib""gdi32.lib""winspool.lib""comdlg32.lib""advapi32.lib""shell32.lib""ole32.lib""oleaut32.lib""uuid.lib" "odbc32.lib""odbccp32.lib"/ MACHINE:X86/SAFESEH:NO/INCREMENTAL:NO /PGD:"C:\Users\apple\Documents\SP_Lab7\Debug\SP_Lab7_Demo.pgd"/ SUBSYSTEM:WINDOWS/MANIFESTUAC: "level ='asInvoker'uiAccess ='false'"/ ManifestFile:"Debug\SP_Lab7_Demo.exe.intermediate.manifest"/ ERRORREPORT:PROMPT/NOLOGO/TLBID:1

如果我发表评论call print,那么一切都正常执行(甚至是Windows API函数).有没有办法从asm文件调用C函数而不创建包含的cpp文件<cstdio>?有可能吗?

x86 assembly masm linker-errors visual-studio

6
推荐指数
2
解决办法
4388
查看次数

为什么不在这个静态库中创建多个定义的符号?

在一个静态库项目中,我有一个带声明但未实现的函数的头文件.

我有一个实现这些功能的.cpp文件.

然后,为了更好地理解链接器错误,我复制了cpp文件,所以我有一个完全重复的它也被编译.因此,两个文件都有标头中每个符号的双重实现.

它编译,当在另一个项目中使用时,它会链接.

这是静态库的最小示例:

api.hpp:

void printWhatever();
Run Code Online (Sandbox Code Playgroud)

errortest.cpp和duplicate.cpp是相同的:

#include "api.hpp"
#include <iostream>
void printWhatever(){
  std::cout << "hi " << "\n";
}
Run Code Online (Sandbox Code Playgroud)

我将其编译为包含这两个源文件的静态库.我看到编译器为两个文件生成报告.

现在我在一个可执行文件中使用这个编译库,一个不同的项目:main.cpp:

#include <api.hpp>
int main(int argc, const char * argv[]) {
  printWhatever();

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

它运行并打印"hi".

为什么函数没有多重定义?

c++ linker linker-errors

6
推荐指数
1
解决办法
753
查看次数