c++多定义符号
c++ multi defined symbol
所以我有这个为我的程序保存一些函数的dll。称为gc.dll我有它作为参考在我的主要项目。在我的主要项目中,我有两个头文件和两个源文件,
dx9d3d.h
main.h
main.cpp
dx9d3d.h
下面是每个文件的包含信息
dx9d3d.h:
#include "gc.h"
dx9d3d.cpp:
#include "dx9d3d.h"
main.h:
#include <Windows.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include "basics.h"
#include "dx9d3d.h"
main.cpp:
#include "main.h"
我不断得到链接器错误的多定义符号的d3ddevice和directx符号我在我的gc.h。我不知道如何将gc.h包含到dx9d3d.h,而不需要它是一个多定义的符号:/请帮助我对这些链接器错误有点陌生。
下面是gc.h 中的代码namespace xaD3D {
__declspec(dllexport) LPDIRECT3D9 d3d;
__declspec(dllexport) LPDIRECT3DDEVICE9 d3dDev;
__declspec(dllexport) bool initD3D(HWND hWnd);
}
,这里是错误
2>main.obj : error LNK2005: "struct IDirect3DDevice9 * xaD3D::d3dDev" (? d3dDev@xaD3D@@3PAUIDirect3DDevice9@@A) already defined in dx9d3d.obj
2>main.obj : error LNK2005: "struct IDirect3D9 * xaD3D::d3d" (? d3d@xaD3D@@3PAUIDirect3D9@@A) already defined in dx9d3d.obj
出现问题是因为项目包含main.cpp
和dx9d3d.cpp
,两者都包含dx9d3d.h
,其中包含gc.h
,因此gc.h
总共包含两次,因此xaD3D
被定义两次。
正如@John Paul所说,通常的解决方案是将定义包装在#ifndef/#endif:
#ifndef GC_H
#define GC_H
...
#endif
另一种方法是在头文件中使用#pragma once
(如果支持的话)
通常c++中的多个include错误都是通过这种构造来解决的:
#ifndef GC_Header
#define GC_Header
//header code enclosed here
#endif //GC_Header
尝试在gc.h头文件的开头和结尾添加这些指令。您的gc.h
文件应该如下所示:
#ifndef GC_Header
#define GC_Header
namespace xaD3D {
__declspec(dllexport) LPDIRECT3D9 d3d;
__declspec(dllexport) LPDIRECT3DDEVICE9 d3dDev;
__declspec(dllexport) bool initD3D(HWND hWnd);
}
#endif //GC_Header
HTH,
JP
相关文章:
- vscode g++链路故障:体系结构x86_64的未定义符号
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- 在C++中使用内联方法时出现未定义的符号错误
- 引擎节点:未定义的符号:_ZTV6Config
- 为函数定义符号不明确的指针参数
- 未定义的引用,尽管存在符号,但 std::experimental::可选
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- Windows 链接器是否使用 LoadLibrary 解析 DLL 中未定义的符号?
- C++ 中 dlsym 的未定义符号
- MacOS 上的 Xcode 11 项目不在一个函数中使用 sin 和 cos:未定义的符号"___sincosf_stret"
- 仅在 MacOS 上析构函数的未定义符号
- 重复符号 --- 定义和声明之间的差异
- 符号定义多次
- C++部分模板专用化和多符号定义错误
- 使用Visual Studio 2015时有多个符号定义
- CMake和Dylib:符号定义
- g++说引用是未定义的,即使' nm '列出了我的目标文件中的符号定义
- 为什么't my include保护防止递归包含和多个符号定义
- 多个符号定义,但我只定义我的符号一次
- 用c++科学和工程符号定义Flex实类型