这个问题在这里已有答案:
我在安装斯坦福C ++库时遇到了问题,特别是我需要用于项目的Graph相关库。我正在使用Visual Studio IDE,Eclipse IDE,因此可以理解为任何一种量身定制的指令。
我已经做了以下事情:
- >在https://stanford.edu/~stepp/cppdoc/下载并解压缩库
- >选择StanfordCPPLib中的'collections'文件夹作为Eclipse / Visual Studio的#include目录
- >事情似乎一直有效,#include包起作用。但在编译期间,出现了大量其他“未解决的内含物”。
实际安装图书馆/愿意这样做的人可以帮我做同样的事。我花了很多时间尝试自己解决这个问题,这是一个主要的瓶颈。
规格:Windows 10 Home MY CODE:
#include "pch.h"
#include <iostream>
#include <collections/basicgraph.h>
using namespace std;
int main() {
BasicGraph g;
g.addVertex("1");
g.addVertex("2");
g.addEdge("1", "2");
cout<< g.getVertex("1")->name <<endl;
//boost::optional<int>;
return 0;
}
结果:
1>------ Build started: Project: IsolationBranchingImplementation, Configuration: Debug Win32 ------
1>main.cpp
1>main.obj : error LNK2019: unresolved external symbol "void __cdecl stanfordcpplib::staticInitializeLibrary(void)" (?staticInitializeLibrary@stanfordcpplib@@YAXXZ) referenced in function "public: __thiscall stanfordcpplib::StanfordCppLibraryInitializer::StanfordCppLibraryInitializer(void)" (??0StanfordCppLibraryInitializer@stanfordcpplib@@QAE@XZ)
1>main.obj : error LNK2019: unresolved external symbol "void __cdecl error(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?error@@YAXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "private: void __thiscall Vector<struct Map<class EdgeGen<void *,void *> *,bool>::iterator::NodeMarker>::checkIndex(int,int,int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)const " (?checkIndex@?$Vector@UNodeMarker@iterator@?$Map@PAV?$EdgeGen@PAXPAX@@_N@@@@ABEXHHHV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
1>main.obj : error LNK2019: unresolved external symbol "double __cdecl stringToReal(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?stringToReal@@YANABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "public: virtual void __thiscall BasicGraphGen<void *,void *>::scanArcData(class TokenScanner &,class EdgeGen<void *,void *> *,class EdgeGen<void *,void *> *)" (?scanArcData@?$BasicGraphGen@PAXPAX@@UAEXAAVTokenScanner@@PAV?$EdgeGen@PAXPAX@@1@Z)
1>main.obj : error LNK2019: unresolved external symbol "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall TokenScanner::getStringValue(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)const " (?getStringValue@TokenScanner@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV23@@Z) referenced in function "private: class VertexGen<void *,void *> * __thiscall Graph<class VertexGen<void *,void *>,class EdgeGen<void *,void *> >::scanNode(class TokenScanner &)" (?scanNode@?$Graph@V?$VertexGen@PAXPAX@@V?$EdgeGen@PAXPAX@@@@AAEPAV?$VertexGen@PAXPAX@@AAVTokenScanner@@@Z)
1>main.obj : error LNK2019: unresolved external symbol "public: enum TokenScanner::TokenType __thiscall TokenScanner::getTokenType(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)const " (?getTokenType@TokenScanner@@QBE?AW4TokenType@1@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "private: class VertexGen<void *,void *> * __thiscall Graph<class VertexGen<void *,void *>,class EdgeGen<void *,void *> >::scanNode(class TokenScanner &)" (?scanNode@?$Graph@V?$VertexGen@PAXPAX@@V?$EdgeGen@PAXPAX@@@@AAEPAV?$VertexGen@PAXPAX@@AAVTokenScanner@@@Z)
1>main.obj : error LNK2019: unresolved external symbol "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall TokenScanner::nextToken(void)" (?nextToken@TokenScanner@@QAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) referenced in function "public: virtual void __thiscall BasicGraphGen<void *,void *>::scanArcData(class TokenScanner &,class EdgeGen<void *,void *> *,class EdgeGen<void *,void *> *)" (?scanArcData@?$BasicGraphGen@PAXPAX@@UAEXAAVTokenScanner@@PAV?$EdgeGen@PAXPAX@@1@Z)
1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall TokenScanner::saveToken(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?saveToken@TokenScanner@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "public: virtual void __thiscall BasicGraphGen<void *,void *>::scanArcData(class TokenScanner &,class EdgeGen<void *,void *> *,class EdgeGen<void *,void *> *)" (?scanArcData@?$BasicGraphGen@PAXPAX@@UAEXAAVTokenScanner@@PAV?$EdgeGen@PAXPAX@@1@Z)
1>C:\Users\Aditya Tyagi\source\repos\IsolationBranchingImplementation\Debug\IsolationBranchingImplementation.exe : fatal error LNK1120: 7 unresolved externals
1>Done building project "IsolationBranchingImplementation.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
基于该错误,它似乎缺少它需要链接以生成可执行文件的库/实现。您提供的链接中的库,它作为原始源分发。您需要做的是将整个库合并到项目中,以便您可以使用自己的代码包含和构建它。或者你可以将它构建为一个单独的项目来创建一个静态库,然后你可以像你当前那样包含它的标题,然后将你的程序与它生成的库链接起来。
像这样的东西:
MyProject\
main.cpp
stanfordlib\
collections\
graph.h
graph.cpp
....
然后在你的代码中包含这样的库,
#include "stanfordlib/collections/graph.h"
这将允许您的项目编译库并将其与您的代码链接。