我正在嘗試創建共享庫版本praatlib。代碼本身帶有一個生成靜態庫的Makefile,但爲了我的目的,我需要一個共享庫。我試過兩件事。我嘗試的第一件事就是編輯Makefile以生成共享庫和靜態文件。C/C++嘗試創建共享庫時出錯。製作庫的靜態版本時不會發生錯誤
下面是生成靜態庫生成文件的一部分:
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
,但我有一個類似的錯誤信息像之前一樣。我對構建大型項目或圖書館的經驗不是很多,所以我失去了如何才能使其發揮作用。如果有人能解釋導致我遇到的錯誤的原因以及我如何解決它,我將不勝感激。
如果你拿出所有「-Wl」位? – slugonamission