ldd: não é possível encontrar a biblioteca para o binário xl c compilado, mas poderia para o binário compilado do gcc no AIX

2

Eu compilei no AIX duas versões do proftpd com gcc e uma com xl c compiler da IBM.
A linha de comando para compilar as duas versões é quase a mesma, mas quando eu faço um ldd na versão gcc , eu não tenho nenhum problema quando tento ldd o xl compilado eu tenho para o libmysqlclient.a a mensagem:
Cannot find libmysqlclient.a(libmysqlclient.so.16)
embora inclua o caminho correto da biblioteca durante a compilação.
Então a questão é como eu posso identificar o caminho onde o binário procura pelo binário ou como posso incluir esse caminho durante a compilação?

Sinta-se à vontade para solicitar mais detalhes, atualizarei minha pergunta.

Editar 1 ldd resultado:
para a versão do gcc eu tenho:

ldd/usr/local/proftpd/sbin/proftpd
/usr/local/proftpd/sbin/proftpd needs:
    /usr/lib//libc.a(shr.o)
    /opt/freeware/lib/libcrypto.a(libcrypto.so.1.0.1)
    /usr/lib//libpam.a(shr.o)
    /opt/freeware/lib/libssl.a(libssl.so.1.0.1)
    /opt/freeware/lib/mysql/mysql//libmysqlclient.a(libmysqlclient.so.16)
    /opt/freeware/lib/libz.a(libz.so.1)
    /unix
    /usr/lib//libcrypt.a(shr.o)
    /usr/lib//libc.a(shr_64.o)
    /usr/lib//libpthreads.a(shr_xpg5_64.o)
    /usr/lib//libmls.a(shr.o)
    /opt/freeware/lib/libgcc_s.a(shr.o)
    /usr/lib//libpthread.a(shr_xpg5.o)
    /usr/lib//libcrypt.a(shr_64.o)
    /usr/lib//libpthreads.a(shr_xpg5.o)
    /usr/lib//libmlsenc.a(shr.o)
    /usr/lib//libodm.a(shr.o)
    /usr/lib//libpthreads.a(shr_comm.o)

Para a versão xl C, tenho:

ldd proftpd-1.3.4d/proftpd
proftpd-1.3.4d/proftpd needs:
    /usr/lib/libc.a(shr.o)
    /opt/freeware/lib/libcrypto.a(libcrypto.so.1.0.1)
    /usr/lib/libpam.a(shr.o)
    /opt/freeware/lib/libssl.a(libssl.so.1.0.1)
    Cannot find libmysqlclient.a(libmysqlclient.so.16)
    /opt/freeware/lib/libz.a(libz.so.1)
    /unix
    /usr/lib/libcrypt.a(shr.o)
    /usr/lib/libc.a(shr_64.o)
    /usr/lib/libpthreads.a(shr_xpg5_64.o)
    /usr/lib/libmls.a(shr.o)
    /usr/lib/libcrypt.a(shr_64.o)
    /usr/lib/libpthreads.a(shr_xpg5.o)
    /usr/lib/libmlsenc.a(shr.o)
    /usr/lib/libodm.a(shr.o)
    /usr/lib/libpthreads.a(shr_comm.o)

Comando de compilação Editar 2 + 1 (com um pouco de formatação para torná-lo mais legível:
Para compilar com XL C eu uso este script

export CONFIG_SHELL=/opt/freeware/bin/bash
export CONFIG_ENV_ARGS=/opt/freeware/bin/bash
export CC=cc
export CFLAGS="-qmaxmem=16384 -DSYSV -D_AIX -D_AIX32 -D_AIX41 -D_AIX43 -D_AIX51 -D_AIX52 -D_AIX53 -D_AIX61 -D_ALL_SOURCE -DFUNCPROTO=15 -O -I/opt/freeware/include"export CXX=xlC
export CXXFLAGS=$CFLAGS
export F77=xlf
export FFLAGS="-qmaxmem=16384 -O -I/opt/freeware/include"
export LD=ld
export LDFLAGS="-L/opt/freeware/lib64 -L/opt/freeware/lib:/opt/freeware/lib/mysql/mysql -Wl,-blibpath:/opt/freeware/lib64:/opt/freeware/lib:/usr/lib:/lib -Wl,-bmaxdata:0x80000000"
export PATH=/usr/bin:/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/vac/bin:/usr/vacpp/bin:/usr/ccs/bin:/usr/dt/bin:/usr/opt/perl5/bin:/opt/freeware/bin:/opt/freeware/sbin:/usr/local/bin:/usr/lib/instl
make clean
./configure 
    --with-modules=mod_tls:mod_sql:mod_sql_mysql:mod_sql_passwd:mod_sftp:mod_sftp_sql 
    --without-getopt 
    --enable-openssl 
    --with-includes=/home/user/include3_mysql/zlib:/home/user/include_mysql/mysql:/opt/freeware/lib/mysql/mysql 
    #with or without it doesn't work
     --with-libraries=/opt/freeware/lib/mysql/mysql  
     --prefix=/local/proftpd
make

A linha de comando do GCC é um pouco mais longa, mas sem toda a parte de exportação:

make clean
./configure 
    --with-modules=mod_tls:mod_sql:mod_sql_mysql:mod_sql_passwd:mod_sftp:mod_sftp_sql 
    --without-getopt 
    --enable-openssl 
    --with-includes=/opt/freeware/include:/opt/freeware/include/mysql/mysql/:/home/user/libmath_header/ 
    --with-libraries=/usr/lib/libc.a:/opt/freeware/lib/libcrypto.a:/usr/lib/libpam.a:/opt/freeware/lib/libssl.a:/opt/freeware/lib/mysql/mysql//libmysqlclient.a:/opt/freeware/lib/libz.a:/unix:/usr/lib/libcrypt.a:/usr/lib/libc.a:/usr/lib/libpthreads.a:/usr/lib/libmls.a:/opt/freeware/lib/libgcc_s.a:/usr/lib/libpthread.a:/usr/lib/libcrypt.a:/usr/lib/libpthreads.a:/usr/lib/libmlsenc.a:/usr/lib/libodm.a:/usr/lib/libpthreads.a 
    --prefix=/home/user/proftpd_bin
make

Editar 4 : Alguém tem alguma pequena pista?

    
por Kiwy 02.01.2014 / 11:59

2 respostas

1

Eu finalmente uso este script para permitir a compilação:

export CONFIG_SHELL=/opt/freeware/bin/bash
export CONFIG_ENV_ARGS=/opt/freeware/bin/bash
export CC=cc
export CFLAGS="-qmaxmem=16384 -DSYSV -D_AIX -D_AIX32 -D_AIX41 -D_AIX43 -D_AIX51 -D_AIX52 -D_AIX53 -D_AIX61 -D_ALL_SOURCE -DFUNCPROTO=15 -O -I/opt/freeware/include"export CXX=xlC
export CXXFLAGS=$CFLAGS
export F77=xlf
export FFLAGS="-qmaxmem=16384 -O -I/opt/freeware/include"
export LD=ld

export LDFLAGS="-L/opt/freeware/lib64 -L/opt/freeware/lib -Wl,-blibpath:/opt/freeware/lib64:/opt/freeware/lib:/usr/lib:/lib:/opt/freeware/lib/mysql/mysql -Wl,-bmaxdata:0x80000000"

export PATH=/usr/bin:/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/vac/bin:/usr/vacpp/bin:/usr/ccs/bin:/usr/dt/bin:/usr/opt/perl5/bin:/opt/freeware/bin:/opt/freeware/sbin:/usr/local/bin:/usr/lib/instl
make clean
./configure 
--with-modules=mod_tls:mod_sql:mod_sql_mysql:mod_sql_passwd:mod_sftp:mod_sftp_sql 
--without-getopt 
--enable-openssl 
--with-includes=/home/padubois/include3_mysql/zlib/:/home/padubois/include_mysql/mysql/ 
--with-libraries=/opt/freeware/lib/mysql/mysql:/opt/freeware/lib/mysql/mysql/libmysqlclient.a 
--prefix=/local/proftpd/
make

Eu estava usando indevidamente LDFLAG aqui está a parte importante:
-blibpath:/opt/freeware/lib64:/opt/freeware/lib:/usr/lib:/lib:/opt/freeware/lib/mysql/mysql

Feliz ano novo

    
por 03.01.2014 / 11:58
1

Editar 2 vejo outra linha que é estranha:

--with-includes=[...]/opt/freeware/lib/mysql/mysql 

Não deveria ser /opt/freeware/include/mysql/mysql ?

Além disso, você não adicionou /opt/freeware/lib/mysql/mysql a LDFLAGS ao compilar.

Editar vejo uma coisa que pode explicar isso:

/opt/freeware/lib/mysql/mysql//libmysqlclient.a(libmysqlclient.so.16)

Observe o / extra lá. Eu não sou de modo algum um especialista em xl, mas ele pode estar se confundindo com isso, se você usou a mesma notação ao compilar em ambos os compiladores.

(Resposta original: Da minha vaga memória do AIX, acredito que você queira adicionar o caminho à variável de ambiente LIBPATH .)

    
por 02.01.2014 / 12:11