0

次のメイクファイルを使用して単純なアーカイブを作成しようとしています:

INC    :=-Ilibs/rapidxml-1.13

all: 
  $(CXX) -c $(INC) -o dove.o dove.hpp
  ar rvs libdove.a dove.o  
  ranlib libdove.a         

clean:
  rm -f dove.o libdove.a

dove.hpp ファイルには があり#include "rapidxml.hpp"、コンパイル時に特定の rapidxml を指していることがわかります。ターゲットは完了するまで実行されますmake allが、1) rapidxml+dove.hpp が約 150K しかない場合、出力 dove.o は大量 (19MB!) であり、2) 最終的な libdove.a も dove.o も使用可能なオブジェクトではないようです。 :

[hamiltont@4 dove]$ nm dove.o 
nm: dove.o: File format not recognized
[hamiltont@4 dove]$ nm libdove.a 
nm: dove.o: File format not recognized

[... in other project...]
[hamiltont@4 dove]$ g++ -o bin/AntHybrid build/*.o -L/home/hamiltont/foobar/dove -ldove
/home/hamiltont/foobar/dove/libdove.a: could not read symbols: Archive has no index; run ranlib to add one
collect2: ld returned 1 exit status
4

1 に答える 1

0

ああ、明らかな間違い。ヘッダー ファイルをコンパイルして、それをライブラリとしてパッケージ化しようとしています。プリコンパイル済みヘッダーは可能ですが、このディレクトリに makefile を入れる必要はまったくありません。

于 2013-03-21T04:46:14.297 に答える