问题标签 [multiple-definition-error]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
625 浏览

c - C多定义错误Netbeans

我正在尝试在 C 中构建一些本机库,以加快 Java 项目的蒙特卡罗模拟。我正在使用 MINGW 在 Netbeans 7.0.1 上执行此操作

我正在使用 Geof Kuenning ( http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html ) 的 mtwist 源代码来提供 Mersenne Twister 伪随机数。

我要模拟三个不同的模型,每个模型都可以自行编译(输出到文件而不是使用 JNI)。但是,当我在 JNI 头文件下组合三个模型时,我在尝试构建时开始得到一长串错误:

CLEAN SUCCESSFUL (total time: 7s) "/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf make[1]: 进入目录/c/Users/Tom/Documents/LongMemoryModels/longMemModels' "/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/MinGW_1- Windows/liblongMemModels.dll make[2]: Entering directory/c/Users/Tom/Documents/LongMemoryModels/longMemModels' mkdir -p build/Debug/MinGW_1-Windows rm -f build/Debug/MinGW_1-Windows/longmem.od gcc.exe -std=c99 -c -g -I ../../../../../Program\ Files/Java/jdk1.7.0/include/ -I../../../../../Program\ Files/Java/ jdk1.7.0/include/win32 -MMD -MP -MF build/Debug/MinGW_1-Windows/longmem.od -o build/Debug/MinGW_1-Windows/longmem.o longmem.c mkdir -p build/Debug/MinGW_1-Windows /_ext/2069311947 rm -f build/Debug/MinGW_1-Windows/_ext/2069311947/mtwist.od gcc.exe -std=c99 -c -g -I../../../../../ Program\ Files/Java/jdk1.7.0/include/ -I../../../../../Program\ Files/Java/jdk1.7.0/include/win32 -MMD -MP -MF build/ Debug/MinGW_1-Windows/_ext/2069311947/mtwist.od -o build/Debug/MinGW_1-Windows/_ext/2069311947/mtwist.o ../../../../../cinclude/mtwist/mtwist .c mkdir -p build/Debug/MinGW_1-Windows/_ext/2069311947 rm -f build/Debug/MinGW_1-Windows/_ext/2069311947/randistrs.od gcc.exe -std=c99 -c -g -I../。 ./../../../Program\ Files/Java/jdk1.7.0/include/ -I../../../../../Program\ Files/Java/jdk1.7.0/包括/win32 -MMD -MP -MF build/Debug/MinGW_1-Windows/_ext/2069311947/randistrs.od -o build/Debug/MinGW_1-Windows/_ext/2069311947/randistrs.o ../../../ ../../cinclude/mtwist/randistrs.c mkdir -p dist/Debug/MinGW_1-Windows gcc.exe -std=c99 -shared -o dist/Debug/MinGW_1-Windows/liblongMemModels.dll build/Debug/MinGW_1 -Windows/longmem.o build/Debug/MinGW_1-Windows/_ext/2069311947/mtwist.o > build/Debug/MinGW_1-Windows/_ext/2069311947/randistrs.o0/include/ -I../../../../../Program\ Files/Java/jdk1.7.0/include/win32 -MMD -MP -MF build/Debug/MinGW_1-Windows/_ext/ 2069311947/randistrs.od -o build/Debug/MinGW_1-Windows/_ext/2069311947/randistrs.o ../../../../../cinclude/mtwist/randistrs.c mkdir -p dist/Debug /MinGW_1-Windows gcc.exe -std=c99 -shared -o dist/Debug/MinGW_1-Windows/liblongMemModels.dll build/Debug/MinGW_1-Windows/longmem.o build/Debug/MinGW_1-Windows/_ext/2069311947/mtwist .o > 构建/调试/MinGW_1-Windows/_ext/2069311947/randistrs.o0/include/ -I../../../../../Program\ Files/Java/jdk1.7.0/include/win32 -MMD -MP -MF build/Debug/MinGW_1-Windows/_ext/ 2069311947/randistrs.od -o build/Debug/MinGW_1-Windows/_ext/2069311947/randistrs.o ../../../../../cinclude/mtwist/randistrs.c mkdir -p dist/Debug /MinGW_1-Windows gcc.exe -std=c99 -shared -o dist/Debug/MinGW_1-Windows/liblongMemModels.dll build/Debug/MinGW_1-Windows/longmem.o build/Debug/MinGW_1-Windows/_ext/2069311947/mtwist .o > 构建/调试/MinGW_1-Windows/_ext/2069311947/randistrs.oexe -std=c99 -shared -o dist/Debug/MinGW_1-Windows/liblongMemModels.dll build/Debug/MinGW_1-Windows/longmem.o build/Debug/MinGW_1-Windows/_ext/2069311947/mtwist.o > build/Debug /MinGW_1-Windows/_ext/2069311947/randistrs.oexe -std=c99 -shared -o dist/Debug/MinGW_1-Windows/liblongMemModels.dll build/Debug/MinGW_1-Windows/longmem.o build/Debug/MinGW_1-Windows/_ext/2069311947/mtwist.o > build/Debug /MinGW_1-Windows/_ext/2069311947/randistrs.o
build/Debug/MinGW_1-Windows/_ext/2069311947/mtwist.o: 在函数mts_lrand': C:\Users\Tom\Documents\LongMemoryModels\longMemModels/../../../../../cinclude/mtwist/mtwist.h:402: multiple definition ofmts_lrand' build/Debug/MinGW_1-Windows/longmem.o:C:/cinclude/mtwist/mtwist.h:402: 首先在这里定义 build/ Debug/MinGW_1-Windows/_ext/2069311947/mtwist.o: 在函数mts_llrand': C:\Users\Tom\Documents\LongMemoryModels\longMemModels/../../../../../cinclude/mtwist/mtwist.h:431: multiple definition ofmts_llrand' build/Debug/MinGW_1-Windows/longmem.o:C:/cinclude/mtwist/mtwist.h:431: 首先定义在这里 [... ] build/Debug/MinGW_1-Windows/_ext/2069311947/randistrs.o: 在函数mts_lrand': C:\Users\Tom\Documents\LongMemoryModels\longMemModels/../../../../../cinclude/mtwist/mtwist.h:402: multiple definition ofmts_lrand' build/Debug/MinGW_1-Windows/longmem.o:C:/cinclude/mtwist/mtwist.h:402: 这里首先定义 build /Debug/MinGW_1-Windows/_ext/2069311947/randistrs.o: 在函数mts_llrand': C:\Users\Tom\Documents\LongMemoryModels\longMemModels/../../../../../cinclude/mtwist/mtwist.h:431: multiple definition ofmts_llrand' build/Debug/MinGW_1-Windows/longmem.o:C:/cinclude/mtwist/mtwist.h:431: 这里首先定义 [.. .] make[2]: 离开目录/c/Users/Tom/Documents/LongMemoryModels/longMemModels' make[1]: Leaving directory/c/Users/Tom/Documents/LongMemoryModels/longMemModels'

collect2.exe: 错误: ld 返回 1 退出状态 make[2]: * [dist/Debug/MinGW_1-Windows/liblongMemModels.dll] 错误 1 ​​make[1]:[.build-conf] 错误 2 make: * * [.build-impl] 错误 2

BUILD FAILED(退出值2,总时间:22s)

(这里的省略号 [...] 表示我省略的类似错误)

如您所见,多个包含似乎与 mtwist.h 标头有关,而不是与 JNI 标头有关。此外,即使 mtwist 已经成功构建为静态或动态库,我在尝试构建 JNI 项目时也会遇到相同的错误......

我不希望这个问题太像一篇文章,我希望这个错误会向比我更精明的人揭示一个明显的错误。但是,如果这还不足以指出解决方案,我也会发布源代码。

如果可以的话,请帮我解决这个构建错误。汤姆

编辑:使包含结构比评论中更清晰......在当前安排中:

  • [JNI 模型头].h 包括 jni.h
  • mtwist.h 包括 stdio.h、stdint.h
  • randistrs.h,包括 mtwist.h
  • [个别模型函数].c 包括 stdio.h stdlib.h math.h mtwist/mtwist.h mtwist/randistrs.h jni.h (我想是不必要的)
  • mtwist.c 包括 inttypes.h stdio.h stdlib.h sys/timeb.h mtwist.h
  • randistrs.c 包括 mtwist.h randistrs.h math.h stdlib.h

所有 .h 文件都有使用 #ifndef 的包含保护

0 投票
0 回答
960 浏览

mingw - main.cpp 中每个函数的多重定义

所有 .h 和 .cpp 都来自http://code.google.com/p/asmlib-opencv/

我正在尝试使用他的 demo/main.cpp 并且我已经包含了所有需要的 .h 问题是 main.cpp 中的每个函数都有“多个定义”。我已经搜索了该项目,但在其他任何地方都没有定义它们。.h 由#ifndef/#define 保护。我查看了它们是否在其他任何地方定义,我搜索了是否有一些文件被多次包含。

我在 Win7 中使用 Qt 4.74 和 Mingw 4.8.1


错误/警告

D:\Ptixiaki\test\QtTest\ASMLIBDEMO\Makefile.Debug:197:警告:覆盖 >target debug/main.o' D:\Ptixiaki\test\QtTest\ASMLIBDEMO\Makefile.Debug:147: warning: ignoring old commands for >targetdebug/main.o' 的命令

D:\Ptixiaki\test\QtTest\ASMLIBDEMO\debug\main.o:-1: 在函数Z13buildASMModelRN9StatModel8ASMModelESsSsSs': c:\OpenCV2.3.1\QtBuild\install\include\opencv2\core\mat.hpp:58: multiple definition ofbuildASMModel(StatModel::ASMModel&, std::string, std::string, std::string)' D:\Ptixiaki\ test\QtTest\ASMLIBDEMO\main.cpp:24: error: first defined here

D:\Ptixiaki\test\QtTest\ASMLIBDEMO\debug\main.o:-1: 在函数Z12readASMModelRN9StatModel8ASMModelESs': D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:31: multiple definition ofreadASMModel(StatModel::ASMModel&, std::string)' D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp: 31:错误:首先在这里定义

D:\Ptixiaki\test\QtTest\ASMLIBDEMO\debug\main.o:-1: 在函数Z12searchAndFitRN9StatModel8ASMModelERN2cv17CascadeClassifierERKSsi': D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:40: multiple definition ofsearchAndFit(StatModel::ASMModel&, cv::CascadeClassifier&, std::string const&, int)' D:\Ptixiaki\test\ QtTest\ASMLIBDEMO\main.cpp:40: error: first defined here

D:\Ptixiaki\test\QtTest\ASMLIBDEMO\debug\main.o:-1: 在函数Z11asmOnWebCamRN9StatModel8ASMModelERN2cv17CascadeClassifierEi': D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:64: multiple definition ofasmOnWebCam(StatModel::ASMModel&, cv::CascadeClassifier&, int)' D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main. cpp:64: 错误:首先在这里定义

D:\Ptixiaki\test\QtTest\ASMLIBDEMO\debug\main.o:-1: In function Z8showHelpv': D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:93: multiple definition ofshowHelp()' D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:93: error: first defined here

D:\Ptixiaki\test\QtTest\ASMLIBDEMO\debug\main.o:-1: In function main': D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:120: multiple definition ofmain' D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:120: error: first defined here

:-1: 错误: collect2: ld 返回 1 退出状态

代码

0 投票
3 回答
260 浏览

c++ - C 中的 C++ 模板


我正在尝试从 C 中的 C++ 标准库中重新创建一些类。例如,std::pair 类。
为了模拟模板,我当然使用了宏。这是它的外观示例:

如果我试图在多个源文件中使用这种结构,我必须多次生成代码。显然,这会导致错误。

有没有办法解决这个问题,所以我可以在 C 中使用这些“模板”?

0 投票
1 回答
439 浏览

c++ - 使用在同一命名空间中定义的构造函数实例化命名空间中的对象。C++

在尝试为原始函数创建函数对象包装类时,我尝试在头文件的命名空间中定义并在源代码中声明它时遇到了多重定义错误。这很好,但是当我尝试根据命名空间中的原始函数实例化一个函数对象时,我得到了错误。

空间.h

空间.cpp

主文件

0 投票
1 回答
1384 浏览

c - C 和 CUDA-C 代码中的 NVCC 链接错误

我正在研究 DNA 片段组装程序。仅 CPU 版本是使用 GCC 以 C 语言构建的,我正在尝试使用 NVCC 构建 GPU 版本。

这是生成文件

如图所示,原始.c文件变成了 .cu 文件,nvcc以便正确编译它们。除了main.cu.

ILS.h 包含全局变量的定义p_instanceFragmentsp_instanceLength

问题是在编译 NVCC 时,由于未知原因,我收到以下错误:

没有真正的多重定义,因为使用 GCC 正确构建了相同的代码。看起来好像ILS.h被两次包含在 nvcc 中,分别是ILS.cuConsensus.cu。这也是不可能的,因为我已经用#ifndef .. #define .. #endif语句包装了所有头文件,以避免多次包含和无限包含循环。

也许与makefile命令有关?还是我应该使用 gcc 进行链接?你能告诉我如何处理吗?

问候,

0 投票
1 回答
398 浏览

c++ - 不同源文件中声明的同名类没有编译器/链接器错误

我有以下 2 个文件,它们声明了相同的名称class C

它编译得很好g++ C1.cpp C2.cpp

  1. 为什么只有名称相同 但主体不同时没有编译器/链接器错误?
  2. 为什么单一的定义C::foo(..)既适用于 static静态版本又适用于非静态版本?
  3. 或者,如果这只是编译器的另一个未定义行为案例,我们可以阻止它吗?
0 投票
1 回答
1514 浏览

c++ - 将 D 库链接到 C++ 代码

最近我学习了优美的语言 D,它更具可塑性,可以帮助自己编写稳定快速的程序。但它并不流行……因为很少有代码写在 D 上,而更多的是写在 C 和 C++ 上。因此,在我阅读了 Andrei Alexanderscu 的书后,作者非常肤浅地描述了关于将 D 库链接到 C++ 代码的问题,我尝试自己学习并在 D 上编写了一些代码,其中定义的函数返回一个 CompleteAutomata 类的实例,该实例也定义了 AutomataInterface在 C++ 代码中:

相关D代码:

编写代码后,我使用两个不同的编译器(dmdgdc)编译了 D 库,并带有以下标志:

或者

-L当我尝试通过将路径添加到库目录(选项)并直接添加库(选项)将每个收到的库链接到 Qt 项目时-l。在这两种情况下我都有错误。

在第一种dmd情况下,我有“未定义的对 `_d_newclass' 的引用”和另外几个错误:

在第二种情况下(使用时gdc)我收到有关“多重定义”的消息:

经过两天的尝试...

最近我尝试将 Phobos(D 标准库)添加到链接过程中。-lphobos2dmd标志和gdc-lgphobos2 标志对应。但这对我没有帮助...

使用dmd链接器输出时:

我已经尝试替代 libcurl-gnutls: ln -s /usr/lib64/libcurl.so.4 /usr/lib64/libcurl-gnutls.so.4。然后链接相同但没有关于 libcurl-gnutls 的消息的结果。

使用gdc链接器输出时再次谈论“多重定义到”:

最后有关于 librt.so.1 的消息。我检查 /usr/lib64 并在那里看到它的库文件。

亲爱的魔术师,请告诉我如何将 D 库连接到 C++ 代码。

0 投票
1 回答
1248 浏览

c++ - c++ 使用模板的多个定义错误

我是基于模板的编程的新手,编译项目时出现此错误

给定的代码完全在 .h 头文件中。非常感谢任何解决此问题的指针。

代码 :

0 投票
3 回答
6586 浏览

c++ - 多个 c++ 文件导致“多个定义”错误?

我第一次在一个项目中使用多个 C++ 文件。两者都需要包含受保护的 (#ifndef) 头文件。但是,当我这样做时,会出现多重定义错误。

我有两个直接调用标头的 .cpp 文件,一个间接调用(另一个包含它),然后是另外两个包含它的头文件。

那么我需要做些什么来摆脱错误呢?

错误:

obj\Debug\main.o||在函数Z14sortLibQtyTest4BookS_':| [PATH]\miscFuncs.h|16|multiple definition ofsortLibQtyTest(Book, Book)'

代码:

应该提到的是,这不是唯一给我带来问题的功能,可能有十多个,而且有些不是那么简短和甜蜜。此外,多个文件中需要这些功能。

0 投票
3 回答
99 浏览

c++ - 包含文件会导致全局变量的多个定义错误

我收到一个时髦的多重定义错误。包含结构如下:

主要包括 vm,其中包括后端。

char *在后端有三个全局指针,它是我得到多个定义错误的成员。

vm.cpp我在,main.cppmoc_vm.cpp(我使用 Qt)中得到了多个定义。

我尝试在其他来源中将指针声明为外部的,但这没有帮助。所有预处理器保护都到位,我不知道为什么会出现错误,因为它们显然只在一个地方定义......

有任何想法吗?

编辑:这很奇怪,我可以将 BACKEND 包含到 MAIN 中并且没有问题,只有当链是 MAIN>VM>BACKEND 时,我才会收到错误。