내 응용 프로그램에 일부 외부 코드를 통합하려고합니다. 내 코드는 순수한 C이지만 새로운 코드는 C++이므로 내 C 파일의 이름을 .cc로 변경하고 g ++로 모든 것을 컴파일했습니다.여러 정의의 std :: functions 연결할 때
그것은 잘 컴파일,하지만 난 링크 오류의 crapton 얻을 : 나는이 일을 구축 할 Cmake를 사용하고
CMakeFiles/svrt.dir/svrtH_generator.cc.o: In function `operator new(unsigned long, void*)':
svrtH_generator.cc:(.text+0x0): multiple definition of `operator new(unsigned long, void*)'
CMakeFiles/svrt.dir/svrt_generator.cc.o:svrt_generator.cc:(.text+0x0): first defined here
CMakeFiles/svrt.dir/svrtH_generator.cc.o: In function `operator new[](unsigned long, void*)':
svrtH_generator.cc:(.text+0x10): multiple definition of `operator new[](unsigned long, void*)'
CMakeFiles/svrt.dir/svrt_generator.cc.o:svrt_generator.cc:(.text+0x10): first defined here
CMakeFiles/svrt.dir/svrtH_generator.cc.o: In function `operator delete(void*, void*)':
svrtH_generator.cc:(.text+0x20): multiple definition of `operator delete(void*, void*)'
CMakeFiles/svrt.dir/svrt_generator.cc.o:svrt_generator.cc:(.text+0x20): first defined here
CMakeFiles/svrt.dir/svrtH_generator.cc.o: In function `operator delete[](void*, void*)':
svrtH_generator.cc:(.text+0x30): multiple definition of `operator delete[](void*, void*)'
CMakeFiles/svrt.dir/svrt_generator.cc.o:svrt_generator.cc:(.text+0x30): first defined here
[you got the idea...]
svrtH_generator.cc:(.text+0x1060): multiple definition of `std::fixed(std::ios_base&)'
CMakeFiles/svrt.dir/svrt_generator.cc.o:svrt_generator.cc:(.text+0xe80): first defined here
collect2: ld returned 1 exit status
make[3]: *** [dev/svrt/libsvrt.so] Error 1
make[2]: *** [dev/svrt/CMakeFiles/svrt.dir/all] Error 2
make[1]: *** [dev/svrt/CMakeFiles/svrt.dir/rule] Error 2
make: *** [svrt] Error 2
,하지만 아무것도 정말 복잡하지 않습니다. 나는 왜 내가이 모든 에러를 얻었는지 모르겠다. 왜냐하면 내 코드는 여러 가지 방법 (나는 표준 패키지에서 아무 것도 사용하지 않는다)이고 통합하려고 시도하는 코드는 훨씬 복잡하지 않기 때문이다.
경고는 새로운 C++ 코드가 아닌 내 자신의 코드를 연결하는 데 있습니다.
아무도 없습니까?
편집 : 나는 통합하려고 외부 코드에 파고 후, 나는 몇 가지가 포함 발견
또한#include <iostream>
#include <cmath>
#include <fstream>
#include <cfloat>
#include <stdlib.h>
#include <string.h>
이 iostream 너무 다른 헤더에 포함, 그들 모두가 경비를 포함해야한다.
업데이트 : 외부 코드를 약간 지우고 불필요한 종속성을 제거했습니다. 나는 여전히 링커 오류가 있지만, 훨씬 덜 :
는CMakeFiles/svrt.dir/svrtH_generator.cc.o: In function `std::abs(long)':
svrtH_generator.cc:(.text+0x0): multiple definition of `std::abs(long)'
CMakeFiles/svrt.dir/svrt_generator.cc.o:svrt_generator.cc:(.text+0x0): first defined here
CMakeFiles/svrt.dir/svrtH_generator.cc.o: In function `__gnu_cxx::abs(long long)':
svrtH_generator.cc:(.text+0x20): multiple definition of `__gnu_cxx::abs(long long)'
CMakeFiles/svrt.dir/svrt_generator.cc.o:svrt_generator.cc:(.text+0x20): first defined here
CMakeFiles/svrt.dir/svrtH_generator.cc.o: In function `__gnu_cxx::div(long long, long long)':
svrtH_generator.cc:(.text+0x40): multiple definition of `__gnu_cxx::div(long long, long long)'
CMakeFiles/svrt.dir/svrt_generator.cc.o:svrt_generator.cc:(.text+0x40): first defined here
CMakeFiles/svrt.dir/svrtH_generator.cc.o: In function `std::div(long, long)':
svrtH_generator.cc:(.text+0x350): multiple definition of `std::div(long, long)'
CMakeFiles/svrt.dir/svrt_generator.cc.o:svrt_generator.cc:(.text+0x150): first defined here
코드는 모두 cmath
및 cstdlib
포함하고 복근과 기본 네임 스페이스를 사용하여 다른 기능을 의미합니다. 이것이 문제가 될 수 있습니까?
코드의 모양은 무엇입니까? C++ 헤더는 어떻게 포함됩니까? – jalf