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