0

praatlibの共有ライブラリバージョンを作成しようとしています。コード自体には静的ライブラリを生成するMakefileが付属していますが、私の目的には共有ライブラリが必要です。私は2つのことを試しました。私が最初に試したのは、Makefileを編集して、静的ライブラリと一緒に共有ライブラリを作成することでした。

静的ライブラリを生成するmakefileの部分は次のとおりです。

libpraat.a:
   cd GSL; make
   cd num; make
   cd num/glpk; make
   cd kar; make
   cd audio; make
   cd mp3; make
   cd FLAC; make
   cd stat; make
   cd fon; make
   cd dwsys; make
   cd dwtools; make
   cd LPC; make
   cd FFNet; make
   cd artsynth; make
   cd library; make
   rm -f libpraat.a
   ar r libpraat.a `find num glpk audio stat LPC FFNet dwtools artsynth fon stat dwsys GSL kar FLAC mp3 library -name "*.o"`

そして、これが共有ライブラリを作成するために追加したものです。

libpraat.so:
   cd GSL; make
   cd num; make
   cd num/glpk; make
   cd kar; make
   cd audio; make
   cd mp3; make
   cd FLAC; make
   cd stat; make
   cd fon; make
   cd dwsys; make
   cd dwtools; make
   cd LPC; make
   cd FFNet; make
   cd artsynth; make
   cd library; make
   rm -f libpraat.so
   $(CC) -shared -Wl,-soname,libpraat.so -o libpraat.so `find num glpk audio stat LPC FFNet dwtools artsynth fon stat dwsys GSL kar FLAC mp3 library -name "*.o"`

静的ライブラリは問題なく作成されますが、共有ライブラリを作成しようとするとエラーが発生します。

これがエラーメッセージの始まりです(エラーはたくさんありますが、基本的には下に貼り付けたものと同じです)。

gcc -std=gnu99 -DUNIX -Dlinux -DCONSOLE_APPLICATION -I /usr/local/include -I /usr/X11R6/include -Wimplicit -Wreturn-type -Wunused -Wunused-parameter -Wuninitialized -O -fPIC -Wall -shared -Wl,-soname,libpraat.so -o libpraat.so `find num glpk audio stat LPC FFNet dwtools artsynth fon stat dwsys GSL kar FLAC mp3 library -name "*.o"`
stat/Table.o: In function `Table_getStringValue':
Table.c:(.text+0x246): multiple definition of `Table_getStringValue'
stat/Table.o:Table.c:(.text+0x246): first defined here
stat/Table.o:(.data.rel+0x174): multiple definition of `classTable'
stat/Table.o:(.data.rel+0x174): first defined here
stat/Table.o:(.data.rel+0xb4): multiple definition of `classTableRow'
stat/Table.o:(.data.rel+0xb4): first defined here
stat/Table.o: In function `Table_appendRow':
Table.c:(.text+0x1147): multiple definition of `Table_appendRow'
stat/Table.o:Table.c:(.text+0x1147): first defined here
stat/Table.o: In function `Table_initWithoutColumnNames':
Table.c:(.text+0x11a5): multiple definition of `Table_initWithoutColumnNames'
stat/Table.o:Table.c:(.text+0x11a5): first defined here
stat/Table.o: In function `Table_createWithoutColumnNames':
Table.c:(.text+0x123f): multiple definition of `Table_createWithoutColumnNames'
stat/Table.o:Table.c:(.text+0x123f): first defined here
stat/Table.o: In function `Table_insertColumn':
Table.c:(.text+0x1298): multiple definition of `Table_insertColumn'
stat/Table.o:Table.c:(.text+0x1298): first defined here
stat/Table.o: In function `Table_appendColumn':
Table.c:(.text+0x151e): multiple definition of `Table_appendColumn'

さまざまなことを試し、イライラした後、次のコマンドを使用して、直接持っていた静的ライブラリを共有ライブラリに変換してみました。

g++ -std=c++98 -fpic -g -O1 -shared -o libpraat.so -Wl,--whole-archive libpraat.a

しかし、以前と同様のエラーメッセージが表示されました。私は大規模なプロジェクトやライブラリの構築にあまり経験がないので、これをどのように機能させることができるかについて迷っています。私が経験しているエラーの原因と、それを修正する方法を誰かが説明していただければ幸いです。

4

1 に答える 1

3

オブジェクトファイルを見つけるために使用するコマンドを注意深く見てみましょう。

find num glpk audio stat LPC FFNet dwtools artsynth fon \
        stat dwsys GSL kar FLAC mp3 library -name "*.o"

statが 2 回表示されることに注意してください。そうしないでください。

于 2012-05-16T21:32:48.817 に答える