공유 라이브러리 에러들

cannot open shared object file

해당 공유 라이브러리를 찾지 못해서 나는 에러. 주로 HPC 컴퓨팅 시에 각 노드들의 환경이 달라 많이 발생한다.

libstdc++.so.5: cannot open shared object file: No such file or directory
libgcc_s.so.1: cannot open shared object file: No such file or directory

undefined reference to

해당 공유 라이브러리는 존재하지만 라이브러리 안에 해당하는 함수가 없어서 나는 에러. 보통 구버전의 공유 라이브러리를 사용하려고 할 때 나타난다.

samtools 컴파일 시에 나타났던 에러

gcc -pthread -o samtools bam_index.o bam_plcmd.o sam_view.o bam_cat.o bam_md.o bam_reheader.o bam_sort.o bedidx.o kprobaln.o bam_rmdup.o bam_rmdupse.o bam_mate.o bam_stat.o bam_color.o bamtk.o bam2bcf.o bam2bcf_indel.o errmod.o sample.o cut_target.o phase.o bam2depth.o padding.o bedcov.o bamshuf.o faidx.o stats.o stats_isize.o bam_flags.o bam_split.o bam_tview.o bam_tview_curses.o bam_tview_html.o bam_lpileup.o libbam.a htslib-1.2.1/libhts.a  -lcurses  -lm -lz

bedidx.o: In function `bed_read':
/home/lab/bin/samtools-1.2/bedidx.c:170: undefined reference to `gzopen64'

phase.o: In function `loadpos':
/home/lab/bin/samtools-1.2/phase.c:507: undefined reference to `gzopen64'

bedcov.o: In function `main_bedcov':
/home/lab/bin/samtools-1.2/bedcov.c:98: undefined reference to `gzopen64'

collect2: ld returned 1 exit status
make: *** [samtools] Error 1

no version information available

bigWigToWig 를 실행시켰을 때 다음과 같은 에러 메시지가 나타난다.

bin/ucsc/bigWigToWig: /lib64/libz.so.1: no version information available (required by bin/ucsc/bigWigToWig)

원인: 해당 공유라이브러리는 찾았으나 버전 정보를 찾지 못하는 에러. 하지만 실행에 문제를 일으키지는 않는 경우가 많다.

readelf -V {exec}: ELF 실행 파일의 현재 버전 정보를 보는 명령어


공유 라이브러리들이 위치하는 장소

각 bin, include, lib, lib64, share, man 폴더들이 위치한다.


현재 실행 파일이 사용하고 있는 공유 라이브러리들의 목록

ldd (executable file): 현재 실행 파일이 사용하고 있는 공유 라이브러리들의 목록을 확인하는 명령어

$ ldd samtools
    linux-vdso.so.1 =>                        (0x00007fffcefff000)
    libncurses.so.5 => /lib64/libncurses.so.5 (0x00000033fca00000)
    libm.so.6       => /lib64/libm.so.6       (0x000000301e400000)
    libz.so.1       => /lib64/libz.so.1       (0x00000030da600000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x000000301ec00000)
    libc.so.6       => /lib64/libc.so.6       (0x000000301e000000)
    libtinfo.so.5   => /lib64/libtinfo.so.5   (0x00000033fce00000)
    libdl.so.2      => /lib64/libdl.so.2      (0x000000301e800000)
    /lib64/ld-linux-x86-64.so.2               (0x000000301dc00000)

ldconfig -v: 현재 불러오고 있는 공유 라이브러리의 목록들을 확인하는 명령어