ubuntu 64bitでのPLIコンパイル

設計

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
タイトルとURLをコピーしました