我正在学习一些CSP(约束满足)理论的东西,并且正在使用这个库来解析XML文件.我正在使用Xcode作为IDE.
我的程序编译得很好,但是当它链接文件时,我得到XMLParser_libxml2.hh文件的重复符号错误.我的文件是这样分开的:
包含上面的XMLParser文件的类头文件包含类头文件
的类实现文件包含类头文件
的主文件
重复的符号出现在main.o和classfile.o中,但据我所知,我实际上并没有两次添加.hh文件.
完整错误:
ld: duplicate symbol bool CSPXMLParser::UTF8String::to<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > >(std::basic_string<char,
std::char_traits<char>, std::allocator<char> >&) constin
/Users/vash265/CSP/Untitled/build/Untitled.build/Debug/Untitled.build/Objects-
normal/x86_64/dStructFill.o and
/Users/vash265/CSP/Untitled/build/Untitled.build/Debug/Untitled.build/Objects-
normal/x86_64/main.o`
Run Code Online (Sandbox Code Playgroud)
将类的实现复制到主文件中并将类实现文件从编译目标中删除会消除错误,但这种混乱是一种混乱,我将很快添加更多类(并且它会很好将它们放在单独的文件中).
正如我已经理解的那样,这是由文件(XMLParser_libxml2.hh)在一个文件中同时具有类和函数定义和实现引起的(似乎这可能是由于在那个'标题'文件).关于如何在main.cpp中粘贴所有类文件的任何想法?(我试过#ifdefs
,他们不工作).
我正在尝试编译两个.cpp文件,(foo.cpp和bar.cpp)并构建一个共享对象(project.so).但是编译失败并且(我的一部分)错误是:
....
duplicate symbol _n in:
foo.o
bar.o
ld: 5 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1(use -v to see
invocation)
make: *** [project.so] Error 1
ERROR: compilation failed for package ‘project’
Run Code Online (Sandbox Code Playgroud)
我的.cpp文件有几个常见的和不常见的头文件,一些常见和不常见的命名函数,以及一组通常命名的变量:
Foo.cpp中
#include <iostream>
#include <fstream>
#include <vector>
#include <ctime>
#include <cmath>
size_t m1;
double k1=2.0;
std::vector<double> x,y;
std::vector<double> z;
size_t n,p;
void inputfoo(){...}
void output(){...}
Run Code Online (Sandbox Code Playgroud)
bar.cpp
#include <iostream>
#include <fstream>
#include <vector>
#include <ctime>
#include <cmath>
#include "Eigen/Dense"
#include "Eigen/Cholesky" …
Run Code Online (Sandbox Code Playgroud)