[英]Problems when linking shared library
以下是我如何使用共享庫生成可執行文件的步驟。
我有三個文件:
文件libhello.c
/* hello.c - demonstrate library use. */ #include <stdio.h> void hello(void) { printf("Hello, library world./n"); }
文件libhello.h
/* hello.h - demonstrate library use. */ void hello(void);
文件main.c
/* main.c -- demonstrate direct use of the "hello" routine */ #include "hello.h" int main(void) { hello(); return 0; }
我使用下面的命令來生成共享庫。
gcc -g -Wall -fPIC -c hello.c -o hello.o gcc -shared -W,soname,-libhello.so.0 -o libhello.so.0.0.0 hello.o
最后,我將庫路徑添加到LD_LIBRARY_PATH
變量,並嘗試使用共享庫創建可執行文件。
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ln -s libhello.so.0.0.0 libhello.so.0 gcc -g -Wall -c main.c -o main.o -I. gcc -o main main.o -lhello -L.
但是,在最后一步,有一個錯誤:找不到-lhello。 那么,我哪里錯了?
謝謝。
鏈接新程序時, gcc
查找libhello.so
。 當搜索已鏈接程序的動態依賴項時,將使用libhello.so.0
。
gcc -o main main.o -lhello -L.
: gcc -o main main.o -lhello -L.
查找libhello.so
和./main
查找libhello.so.0
。 這樣就可以為舊版程序提供庫的多個版本,同時可以精確地標識與已安裝標頭匹配的庫。
一個符號鏈接libhello.so
> libhello.so.0.0.0
應該可以解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.