2013-12-03 2 views
2

Я пытаюсь получить OGDF, работая над тем, подходит ли он для моего проекта, но у меня возникают проблемы с образцовой программой.gcc Linker and OGDF "undefined reference to` ogdf :: Initialization :: Initialization() '"

Я пытаюсь скомпилировать this example program:

#include <ogdf/basic/Graph.h> 
#include <ogdf/basic/graph_generators.h> 
#include <ogdf/layered/DfsAcyclicSubgraph.h> 

using namespace ogdf; 

int main() 
{ 
    Graph G; 
    randomSimpleGraph(G, 10, 20); 
    DfsAcyclicSubgraph DAS; 
    DAS.callAndReverse(G); 
    G.writeGML("test.gml"); 

    return 0; 
} 

с помощью этой команды:

$g++ -pthread -I ./OGDF/ -L ./OGDF/_release/ -lOGDF test2.cpp 

Но я получаю следующую ошибку

/tmp/ccbpkfdt.o: In function `main': 
test2.cpp:(.text+0x12): undefined reference to `ogdf::Graph::Graph()' 
test2.cpp:(.text+0x2e): undefined reference to `ogdf::randomSimpleGraph(ogdf::Graph&, int, int)' 
test2.cpp:(.text+0x4e): undefined reference to `ogdf::AcyclicSubgraphModule::callAndReverse(ogdf::Graph&)' 
test2.cpp:(.text+0x62): undefined reference to `ogdf::Graph::writeGML(char const*) const' 
test2.cpp:(.text+0x7f): undefined reference to `ogdf::Graph::~Graph()' 
test2.cpp:(.text+0xa1): undefined reference to `ogdf::Graph::~Graph()' 
/tmp/ccbpkfdt.o: In function `__static_initialization_and_destruction_0(int, int)': 
test2.cpp:(.text+0xfb): undefined reference to `ogdf::Initialization::Initialization()' 
test2.cpp:(.text+0x112): undefined reference to `ogdf::Initialization::~Initialization()' 
/tmp/ccbpkfdt.o: In function `ogdf::DfsAcyclicSubgraph::DfsAcyclicSubgraph()': 
test2.cpp:(.text._ZN4ogdf18DfsAcyclicSubgraphC2Ev[_ZN4ogdf18DfsAcyclicSubgraphC5Ev]+0x16): undefined reference to `vtable for ogdf::DfsAcyclicSubgraph' 
/tmp/ccbpkfdt.o: In function `ogdf::DfsAcyclicSubgraph::~DfsAcyclicSubgraph()': 
test2.cpp:(.text._ZN4ogdf18DfsAcyclicSubgraphD2Ev[_ZN4ogdf18DfsAcyclicSubgraphD5Ev]+0xb): undefined reference to `vtable for ogdf::DfsAcyclicSubgraph' 
collect2: error: ld returned 1 exit status 

Я пытался компилировать привет мир, с включая OGDF, и я до сих пор получил:

undefined reference to `ogdf::Initialization::Initialization()' 

Я думаю, что я не правильно связываюсь или что-то в этом роде?

+0

ли вы получить эту работу? –

+0

nope – jsj

+0

Я добавил решение. Попробуйте это :) –

ответ

0

Вы должны создать свою программу с помощью -DOGDF_DLL при использовании OGDF в качестве общей библиотеки.

Смотрите здесь: http://www.ogdf.net/doku.php/tech:defines

2

Вы должны быть очень осторожны, в каком порядке вы тип материала при связывании с библиотекой. Попробуйте положить test2.cpp перед тем -lOGDF вместо этого, как это:

g++ -pthread -I ./OGDF/ -L ./OGDF/_release/ test2.cpp -lOGDF