Compile extensões definidas pelo usuário em C para todos os sistemas operacionais suportados.
Se você criar seus próprios
nós definidos pelo usuário, analisadores e saídas de usuário em C, compile-os no sistema operacional
em que o intermediário de destino está sendo executado. As amostras são fornecidas
para nós e analisadores e são descritas em Arquivos de Nós de Amostra e Arquivos de Analisadores de Amostra.
Utilize as seguintes instruções para compilar as amostras. Se desejar criar suas próprias
extensões, consulte os seguintes tópicos:
Estas instruções utilizam os nomes de arquivos das amostras fornecidas. Se você estiver compilando suas próprias extensões definidas pelo usuário, substitua esses nomes de arquivos pelos seus próprios nomes de arquivos.
Ao compilar uma extensão definida pelo usuário que é gravada em C, é necessário ter um compilador compatível. Para obter detalhes de compiladores suportados, consulte Suporte Opcional ao Software.
Compile a origem para a extensão definida pelo usuário em cada um dos sistemas operacionais suportados para criar o arquivo executável que o intermediário chama para implementar a extensão definida pelo usuário. Nos sistemas Linux, UNIX e z/OS, este arquivo é um arquivo LIL (Loadable Implementation Library); nos sistemas Windows é um DLL (Dynamic Load Library).
As bibliotecas criadas para conter nós
definidos pelo usuário ou analisadores devem ter a extensão .lil em
todos os sistemas operacionais, para que o intermediário possa carregá-los. As bibliotecas que contêm saídas de usuário
devem ter a extensão .lel em todos
os sistemas operacionais. Os exemplos neste tópico mostram bibliotecas com a
extensão .lil.
Consulte a documentação para o
compilador que está sendo utilizado para obter detalhes completos de opções de compilação
e link disponíveis que podem ser necessárias para seus programas.
Navegue para o diretório onde seu código-fonte de extensão definido pelo usuário está localizado e siga as instruções para o sistema operacional:
Ao compilar uma extensão definida pelo usuário que é gravada em C, utilize um compilador suportado.
xlc_r -q32 \ -I. \ -I/install_dir/include/plugin \ -c SwitchNode.c \ -o SwitchNode.o xlc_r -q32 \ -I. \ -I/install_dir/include/plugin \ -c BipSampPluginUtil.c \ -o BipSampPluginUtil.o xlc_r -q32 \ -I. \ -I/install_dir/include/plugin \ -c Common.c \ -o Common.o xlc_r -q32 \ -I. \ -I/install_dir/include/plugin \ -c NodeFactory.c \ -o NodeFactory.o xlc_r -q32 \ -qmkshrobj \ -bM:SRE \ -bexpall \ -bnoentry \ -o SwitchNode.lil SwitchNode.o \ BipSampPluginUtil.o Common.o NodeFactory.o \ -L /install_dir/lib \ -l imbdfplg chmod a+r SwitchNode.lil
Ao compilar uma extensão definida pelo usuário que é gravada em C, utilize um compilador suportado.
cc +z -DD32 \ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c BipSampPluginUtil.c \ -o output_dir/BipSampPluginUtil.o \ -Ae cc +z -DD32 \ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c Common.c \ -o output_dir/Common.o \ -Ae cc +z -DD32 \ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c NodeFactory.c \ -o output_dir/NodeFactory.o \ -Ae cc +z -DD32 \ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c SwitchNode.c \ -o output_dir/SwitchNode.o \ -Ae cc +z -DD32 \ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c TransformNode.c \ -o output_dir/TransformNode.o \ -Ae ld -b \ -o output_dir/SwitchNode.lil \ output_dir/BipSampPluginUtil.o \ output_dir/Common.o \ output_dir/NodeFactory.o \ output_dir/SwitchNode.o \ output_dir/TransformNode.o \ -L install_dir/lib \ -L install_dir/xml4c/lib \ -L install_dir/merant/lib \ -L install_dir/jre/lib/PA_RISC2.0 \ -L install_dir/jre/lib/PA_RISC2.0/server \ -l imbdfplg chmod a+r output_dir/SwitchNode.lil
Ao compilar uma extensão definida pelo usuário que é gravada em C, utilize um compilador suportado.
aCC -O +DD64 -AA -mt +z\ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c BipSampPluginUtil.c \ -o output_dir/BipSampPluginUtil.o aCC -O +DD64 -AA -mt +z\ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c Common.c \ -o output_dir/Common.o aCC -O +DD64 -AA -mt +z\ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c NodeFactory.c \ -o output_dir/NodeFactory.o aCC -O +DD64 -AA -mt +z\ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c SwitchNode.c \ -o output_dir/SwitchNode.o aCC -O +DD64 -AA -mt +z\ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c TransformNode.c \ -o output_dir/TransformNode.o ld -b \ -o output_dir/SwitchNode.lil \ output_dir/BipSampPluginUtil.o \ output_dir/Common.o \ output_dir/NodeFactory.o \ output_dir/SwitchNode.o \ output_dir/TransformNode.o \ -L install_dir/lib \ -L install_dir/xml4c/lib \ -L install_dir/merant/lib \ -L install_dir/jre/lib/IA64N\ -L install_dir/jre/lib/IA64N/server \ -l imbdfplg chmod a+r output_dir/SwitchNode.lil
Ao compilar uma extensão definida pelo usuário que é gravada em C, utilize um compilador suportado.
/usr/bin/g++ -c -fpic -MD -trigraphs -I. -I/install_dir/include -I/install_dir/include/plugin -DLINUX -D__USE_GNU -D_GNU_SOURCE TransformNode.c /usr/bin/g++ -c -fpic -MD -trigraphs -I. -I/opt/mqsi/include -I/install_dir/include/plugin -DLINUX -D__USE_GNU -D_GNU_SOURCE SwitchNode.c /usr/bin/gcc -c -fpic -MD -trigraphs -I. -I/opt/mqsi/include -I/install_dir/include/plugin -DLINUX -D__USE_GNU -D_GNU_SOURCE BipSampPluginUtil.c /usr/bin/g++ -c -fpic -MD -trigraphs -I. -I/opt/mqsi/include -I/install_dir/include/plugin -DLINUX -D__USE_GNU -D_GNU_SOURCE Common.c /usr/bin/g++ -c -fpic -MD -trigraphs -I. -I/opt/mqsi/include -I/install_dir/include/plugin -DLINUX -D__USE_GNU -D_GNU_SOURCE NodeFactory.c /usr/bin/g++ -o samples.lil TransformNode.o SwitchNode.o BipSampPluginUtil.o Common.o NodeFactory.o -shared -lc -lnsl -ldl -L/install_dir/lib -limbdfplg
Estes comandos criam o arquivo samples.lil que fornece objetos TransformNode e SwitchNode.
A construção da extensão definida pelo usuário em C com g++ requer algumas alterações; você deve definir a função da interface como uma função de estilo C para o compilador C++. No exemplo a seguir, os ifdefs mantêm seu código portátil e ocultam as diretivas extern "C" a partir de um compilador C.
#ifdef __cplusplus extern "C"{ #endif void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory() { ... ... } #ifdef __cplusplus } #endif
Ao compilar uma extensão definida pelo usuário que é gravada em C, utilize um compilador suportado.
cc -mt \
-I. \
-I/install_dir/include \
-I/install_dir/include/plugin \
-c SwitchNode.c \
-o output_dir/SwitchNode.o
cc -mt \
-I. \
-I/install_dir/include \
-I/install_dir/include/plugin \
-c BipSampPluginUtil.c \
-o output_dir/BipSampPluginUtil.o
cc -mt \
-I. \
-I/install_dir/include \
-I/install_dir/include/plugin \
-c NodeFactory.c \
-o output_dir/NodeFactory.o
cc -mt \
-I. \
-I/install_dir/include \
-I/install_dir/include/plugin \
-c Common.c \
-o output_dir/Common.o
cc -G \
-o output_dir/SwitchNode.lil \
output_dir/SwitchNode.o \
output_dir/BipSampPluginUtil.o \
output_dir/NodeFactory.o \
output_dir/Common.o \
-L /install_dir/lib \
-l imbdfplg
chmod a+r output_dir/SwitchNode.lil
Ao compilar uma extensão definida pelo usuário que é gravada em C, utilize um compilador suportado.
Inclua um espaço entre SwitchNode.c e BipSampPluginUtil.c, e também entre -link e /DLL.
Insira o comando como uma única linha de entrada; no exemplo a seguir, as linhas foram divididas para melhorar a capacidade de leitura.
cl /VERBOSE /LD /MD /Zi /GX /I. /Iinstall_dir\include\plugin SwitchNode.c BipSampPluginUtil.c Common.c NodeFactory.c TransformNode.c -link /DLL install_dir\lib\imbdfplg.lib /OUT:SwitchNode.lil
Se você configurou corretamente a variável de ambiente LIB, não precisará especificar os caminhos completos para os arquivos LIB.
Ao compilar uma extensão definida pelo usuário que é gravada em C, utilize um compilador suportado.
export _CC_STEPS=-1Como alternativa, inclua estas duas linhas em seu arquivo pronto para exportá-lo:
_CC_STEPS=-1 .EXPORT : _CC_STEPS
Para criar construções otimizadas, utilize -2 no lugar de -g nos seguintes comandos:
cc -c \ -Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,float\(ieee\) \ -Wc,xplink \ -W0,LIST\(./SwitchNode.lst\) \ -I. -I${install_dir}/include \ -I${install_dir}/include/plugin \ -I${install_dir}/sample/include \ -I${install_dir}/sample/plugin \ -o ./SwitchNode.o ./SwitchNode.c
cc -c \ -Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,float\(ieee\) \ -Wc,xplink \ -W0,LIST\(./SwitchNode.lst\) \ -I. -I${install_dir}/include \ -I${install_dir}/include/plugin \ -I${install_dir}/sample/include \ -I${install_dir}/sample/plugin \ -o ./BipSampPluginUtil.o ./BipSampPluginUtil.c
cc -c \ -Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,float\(ieee\) \ -Wc,xplink \ -W0,LIST\(./SwitchNode.lst\) \ -I. -I${install_dir}/include \ -I${install_dir}/include/plugin \ -I${install_dir}/sample/include \ -I${install_dir}/sample/plugin \ -o ./Common.o ./Common.c
cc -c \ -Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL, float\(ieee\) \ -Wc,xplink \ -W0,LIST\(./SwitchNode.lst\) \ -I. -I${install_dir}/include \ -I${install_dir}/include/plugin \ -I${install_dir}/sample/include \ -I${install_dir}/sample/plugin \ -o ./NodeFactory.o ./NodeFactory.c
cc \ -Wl,DLL -g -Wl,p,map -Wl,LIST=ALL,MAP,XREF,REUS=RENT \ -Wl,xplink \ -o ./SwitchNode.lil ./SwitchNode.o ./BipSampPluginUtil.o \ ./Common.o ./NodeFactory.o \ ${install_dir}/lib/libimbdfplg.x
Emita o comando a seguir para configurar as permissões da extensão definida pelo usuário para leitura de grupo e para ser executável:
chmod a+rx {output_dir}/SwitchNode.lil