2017-02-02 5 views
-2

Ich baue eine C++ App mit g ++ unter Linux. Ich habe eine Mischung aus .c und .cpp Dateien und das Makefile ruft gcc oder g ++ entsprechend auf. Der Linker schlägt mit:Warum klagen g ++ Linker über Header-Datei?

gcc -Wall -c -O2 -I/root/dpdk-2.2.0/x86_64-native-linuxapp-gcc/include/ -include /root/dpdk-2.2.0/x86_64-native-linuxapp-gcc/include/rte_config.h cfg.c 
gcc -Wall -c -O2 -I/root/dpdk-2.2.0/x86_64-native-linuxapp-gcc/include/ -include /root/dpdk-2.2.0/x86_64-native-linuxapp-gcc/include/rte_config.h mran_structs.c 
g++ -Wall -c -O2 -msse4.1 -I/root/dpdk-2.2.0/x86_64-native-linuxapp-gcc/include/ -include /root/dpdk-2.2.0/x86_64-native-linuxapp-gcc/include/rte_config.h -std=c++11 main.cpp 
gcc -Wall -c -O2 -I/root/dpdk-2.2.0/x86_64-native-linuxapp-gcc/include/ -include /root/dpdk-2.2.0/x86_64-native-linuxapp-gcc/include/rte_config.h wrap_ip.c 
gcc -Wall -c -O2 -I/root/dpdk-2.2.0/x86_64-native-linuxapp-gcc/include/ -include /root/dpdk-2.2.0/x86_64-native-linuxapp-gcc/include/rte_config.h wrap_eth.c 
g++ -Wall -c -O2 -msse4.1 -I/root/dpdk-2.2.0/x86_64-native-linuxapp-gcc/include/ -include /root/dpdk-2.2.0/x86_64-native-linuxapp-gcc/include/rte_config.h -std=c++11 dpdk_socket.cpp 
g++ Log.c cfg.o mran_structs.o main.o wrap_ip.o wrap_eth.o dpdk_socket.o -o l2fwd_adapted -L/root/dpdk-2.2.0/x86_64-native-linuxapp-gcc/lib -Wl,--whole-archive -lrte_distributor -lrte_reorder -lrte_kni -lrte_pipeline -lrte_table -lrte_port -lrte_timer -lrte_hash -lrte_jobstats -lrte_lpm -lrte_power -lrte_acl -lrte_meter -lrte_sched -lm -lrt -lrte_vhost -Wl,--start-group -lrte_kvargs -lrte_mbuf -lrte_mbuf_offload -lrte_ip_frag -lethdev -lrte_cryptodev -lrte_mempool -lrte_ring -lrte_eal -lrte_cmdline -lrte_cfgfile -lrte_pmd_ixgbe -lrt -lm -ldl -Wl,--end-group -Wl,--no-whole-archive -lconfig -lstdc++ -lpthread 
In file included from CommonFunc.h:8:0, 
      from Log.c:16: 
dpdkstd.h:14:24: fatal error: rte_common.h: No such file or directory 
compilation terminated. 
Makefile:39: recipe for target 'l2fwd_adapted' failed 

Ich verstehe nicht, warum der Linker beschwert, dass es nicht eine Header-Datei finden kann. Sicherlich sollte das nur bei der Kompilierung ein Problem sein?

Ich weiß nicht, wie Sie den Fehler beheben.

+2

Warum denken Sie, dass dies ein Linker Fehler ist? –

+0

'rte_common.h: Keine solche Datei oder kein Verzeichnis' stammt nicht vom Linker – P0W

+0

Nein. Der Linker beschwert sich nicht über fehlende Header, aber ich beklagt mich, wenn einige Funktionen aufgerufen werden, ohne ihre Definitionen zu finden. – Raindrop7

Antwort

7

I don't understand why the linker is complaining that it can't find a header file.

Es ist nicht.

Surely that should be a concern only at the compilation stage?

Es ist. Sie kompilieren Log.c, die rte_common.h verweist.

I don't know how to fix the error.

Fix es so, wie Sie andere solche Fehler zu beheben: der Pfad zu dem Header liefern, oder den Header verschieben, oder installieren Sie die fehlende Fremd Bibliothek.

In diesem Fall entweder kopieren, dass -include Flagge, die Sie in allen anderen Build-Befehle haben, oder wenn Sie tatsächlich Log.o anstatt Log.c gemeint, korrigieren Sie die Tippfehler.

+0

Ja, ich meine Log.o, nicht Log.c. Tut mir leid, dass ich das nicht selbst bemerkt habe, aber Sie haben mir viel Zeit gespart. Vielen Dank! – DavidA

Verwandte Themen