ubuntu 64bit環境でModelSimにPLIライブラリをロードする場合は、32bitのシェアード・ライブラリを生成します。具体的には、生成時に次のオプションを指定します。
- コンパイル・オプション: -m32を追加
- リンク・オプション: -melf_i386を追加
エラーの例
64bitのシェアード・ライブラリをロードしようとすると、次のようなエラーが発生します。
# vsim -keepstdout -pli ../bin/pli_mti/pli_boot.so top # Loading ../bin/pli_mti/pli_boot.so # ** Error: (vsim-125) The shared library ../bin/pli_mti/pli_boot.so being loaded was built on a 64-bit machine. A 64-bit shared library cannot be loaded in a 32-bit simulation. Please use compatible machines to build and load the library # ** Error: (vsim-3197) Load of "../bin/pli_mti/pli_boot.so" failed: ../bin/pli_mti/pli_boot.so: wrong ELF class: ELFCLASS64. # ** Error: (vsim-PLI-3002) Failed to load PLI object file "../bin/pli_mti/pli_boot.so".
Makefileの例
コンパイル・オプションに-m32、リンク・オプションに-melf_i386を追加します。
WARNS=-Wall INCS=-I /opt/altera/13.1/modelsim_ase/include LDS=-L /opt/altera/13.1/modelsim_ase/linuxaloem CFLAGS= -fPIC -Wall $(INCS) -m32 LFLAGS= -G -shared -export-dynamic $(LDS) -melf_i386 # change to your compiler CC=gcc # make rules for dynamic libaries pli_boot.so: pli_src.o $(LD) $(LFLAGS) pli_src.o $(LFLAGS) -o pli_boot.so pli_src.o: pli_src.c $(CC) $(CFLAGS) -c pli_src.c