ucscGenomeBrowser / kent

UCSC Genome Browser source tree. Stable branch: "beta".
http://genome.ucsc.edu/
Other
217 stars 84 forks source link

fixCr compile failure #18

Closed freedog8 closed 5 years ago

freedog8 commented 5 years ago

hi, I am compiling some userAPPs with local installed openssl. every thing goes ok until the make application step.

export MACHTYPE=x86_64 cd kent/src/lib

make CFLAGS="-I/home/O_O/local/include/uuid"

cd kent/src/jkOwnLib make CFLAGS="-I/home/O_O/local/include/uuid" cd kent/src/htslib make CFLAGS="-I/home/O_O/local/include/uuid" cd kent/src/utils/fixCr make CFLAGS="-I/home/O_O/local/include/uuid"   gcc -O -g -o /home/O_O/bin/x86_64/fixCr fixCr.o    ../../lib/x86_64/jkweb.a -L/home/O_O/local/lib -lmysqlclient  -lstdc++ -lrt -L/home/O_O/local/lib -lpthread -lssl -lcrypto ../../htslib/libhts.a -L/home/O_O/local/lib -lpng16 -lm -lz ../../lib/x86_64/jkweb.a(https.o): In function openssl_pthread_setup': /home/O_O/kent/src/lib/https.c:38: undefined reference toCRYPTO_num_locks' /home/O_O/kent/src/lib/https.c:42: undefined reference to CRYPTO_set_id_callback' /home/O_O/kent/src/lib/https.c:43: undefined reference toCRYPTO_set_locking_callback' ../../lib/x86_64/jkweb.a(https.o): In function openSslInit': /home/O_O/kent/src/lib/https.c:75: undefined reference toSSL_library_init' /home/O_O/kent/src/lib/https.c:76: undefined reference to ERR_load_crypto_strings' /home/O_O/kent/src/lib/https.c:78: undefined reference toOPENSSL_add_all_algorithms_noconf' ../../lib/x86_64/jkweb.a(https.o): In function netConnectHttpsThread': /home/O_O/kent/src/lib/https.c:109: undefined reference toSSLv23_client_method' /home/O_O/kent/src/lib/https.c:109: undefined reference to `SSLv23_client_method' collect2: error: ld returned 1 exit status make: *** [/home/O_O/bin/x86_64/fixCr] Error 1

how can I fix it ?

NullModel commented 5 years ago

Good Morning Freedog8:

This is a puzzle, for sure. If I understand you correctly, you have built locally installed ssl libraries and are not using the system installed libraries. Correct ?

There are a number of ways to get around this situation. Do you know if the pre-built binaries will function on your system available at: http://hgdownload.cse.ucsc.edu/admin/exe/linux.x86_64/ or from http://hgdownload.cse.ucsc.edu/admin/exe/macOSX.x86_64/

This would save you the time building these on your system.

If your OS will not operate the binaries, you could use the gBiB virtual machine if you happen to have VirtualBox available on your system: http://genome.ucsc.edu/goldenpath/help/gbib.html

The problem you describe can be due to a number of different reasons. The kent code uses both the SSL library functions and the CRYPTO library functions. There could be confusion of where the include files for these functions were picked up by the kent source build. If the build used something other than you custom built libraries, they might be mixed up. The error indicates the desired functions are not found in the libraries specified: -L/home/O_O/local/lib -lpthread -lssl -lcrypto

There are many ways to run the compile link command, here is one example:

cc -O -g -o /cluster/home/hiram/bin/x86_64/fixCr fixCr.o ../../lib/x86_64/jkweb.a /usr/lib64/libmysqlclient.a /usr/lib64/libssl.a /usr/lib64/libcrypto.a -lkrb5 -ldl -lz /usr/lib/gcc/x86_64-redhat-linux/4.8.5/libstdc++.a /usr/lib64/librt.a -lpthread /usr/lib64/libssl.a /usr/lib64/libcrypto.a -lkrb5 -lk5crypto -ldl ../../htslib/libhts.a /usr/lib64/libpng.a -lm /usr/lib64/libz.a

Note the use of the static libraries. If you have static libraries available, try to link with them in this order of this example.

Have you tried the 'userApps' procedure which is a bit more lightweight compared to building the entire source tree: https://genome-source.gi.ucsc.edu/gitlist/kent.git/tree/master/src/userApps/

nathanweeks commented 3 years ago

This is at least partially a real issue, as CRYPTO_set_locking_callback() was removed in OpenSSL 1.1.0 (https://github.com/openssl/openssl/issues/1260). It's probably worth supporting both OpenSSL variants in kent/src/lib/https.c via #ifdef blocks.