gpt4 book ai didi

c++ - 如果两个静态库包含 pugixml objs,如何避免 `already defined` 与 pugixml 链接错误?

转载 作者:行者123 更新时间:2023-11-28 04:55:15 24 4
gpt4 key购买 nike

所以我有 2 个这样定义的静态库:

静态库1

// StaticLib1.h
#pragma once

class StaticLib1
{
public:
void doSomething1();
};

cpp:

// StaticLib1.cpp
#include "pugixml.hpp"
#include "StaticLib1.h"

void StaticLib1::doSomething1()
{
pugi::xml_node node;
}

静态库2

// StaticLib2.h
#pragma once

class StaticLib2
{
public:
void doSomething2();
};

cpp:

// StaticLib1.cpp
#include "pugixml.hpp"
#include "StaticLib2.h"

void StaticLib2::doSomething2()
{
pugi::xml_node node;
}

主要

#include <iostream>
#include "StaticLib1.h"
#include "StaticLib2.h"

int main(int argv, char** argc)
{
StaticLib1 staticlib1;
StaticLib2 staticlib2;

staticlib1.doSemething1();
staticlib2.doSemething2();

getchar();
return 0;
}

现在,如果我构建这个。我收到很多链接错误。以下是前几个链接错误:

3>StaticLib2.lib(StaticLib2.obj) : error LNK2005: "public: __thiscall pugi::xml_attribute::xml_attribute(struct pugi::xml_attribute_struct *)" (??0xml_attribute@pugi@@QAE@PAUxml_attribute_struct@1@@Z) already defined in StaticLib1.lib(StaticLib1.obj)
3>StaticLib2.lib(StaticLib2.obj) : error LNK2005: "public: __thiscall pugi::xml_attribute::xml_attribute(void)" (??0xml_attribute@pugi@@QAE@XZ) already defined in StaticLib1.lib(StaticLib1.obj)
3>StaticLib2.lib(StaticLib2.obj) : error LNK2005: "private: __thiscall pugi::xml_attribute_iterator::xml_attribute_iterator(struct pugi::xml_attribute_struct *,struct pugi::xml_node_struct *)" (??0xml_attribute_iterator@pugi@@AAE@PAUxml_attribute_struct@1@PAUxml_node_struct@1@@Z) already defined in StaticLib1.lib(StaticLib1.obj)
...
...

现在,我明白了,这个链接错误是因为StaticLib1.lib里面有一个pugixml.obj,里面有pugixml.objStaticLib2.lib 中。但我不明白为什么这会导致与 pugixml 签名的链接错误。为什么它们会被定义两次?如果我调用 staticlib1.doSomething1() 不应该主要不关心 pugi 是否有多个定义? staticlib1.doSomething1() 不应该处理所有这些吗?

pugiconfig.hpp 上我有这些特定的设置:

#ifndef HEADER_PUGICONFIG_HPP
#define HEADER_PUGICONFIG_HPP

#define PUGIXML_WCHAR_MODE

#define PUGIXML_HEAD_ONLY
#include "pugixml.cpp"

#endif

最佳答案

是的,根据 user0042 的建议,我意识到最好自己编译 pugixml.lib 而不是在 #include "pugixml.cpp"配置。我正在使用遗留代码,所以这些惊喜就在那里。现在,我已经解决了我的问题并让我的公司代码更简洁。

关于c++ - 如果两个静态库包含 pugixml objs,如何避免 `already defined` 与 pugixml 链接错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47272810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com