2016-02-23 98 views
1

的代碼庫:動態鏈接庫中找不到-lmean

calc_mean.c

//#include <stdio.h> 

double mean(double a, double b) { 
    return (a+b)/2; 
} 

頭文件:

calc_mean.h

使用庫的程序:

main.c中

#include <stdio.h> 
#include "calc_mean.h" 

int main(int argc, char* argv[]) { 

    double v1, v2, m; 
    v1 = 5.2; 
    v2 = 7.9; 

    m = mean(v1, v2); 

    printf("The mean of %3.2f and %3.2f is %3.2f\n", v1, v2, m); 

    return 0; 
} 

我創建使用以下命令靜態庫:

gcc -c calc_mean.c -o calc_mean.o 
ar rcs libmean.a  calc_mean.o 

鏈接對靜態庫:完全沒有問題,只要

gcc -static main.c -L. -lmean -o statically_linked 

一切正常,其靜態庫.. 。

現在這些是我用來創建共享的命令庫:

gcc -c -fPIC calc_mean.c -o calc_mean.o 
gcc -shared -Wl,-soname,libmean.so.1 -o libmean.so.1.0.1 calc_mean.o 

當我進入linkng命令

gcc main.c -o dynamically_linked -L. -lmean 

我收到錯誤消息無法找到-lmean LD返回1退出狀態

連接錯誤的信息在這裏這兩個命令後

enter image description here

可以有人給我在C中創建DLL的步驟嗎?

回答

1

這是因爲您正在創建一個名爲libmean.so.1.0.1的文件,但您要求鏈接器鏈接libmean.so(這是-lmean擴展到的內容)。

您需要一個符號鏈接libmean.so指向libmean.so.1.0.1

+0

gcc -c -fPIC calc_mean.c -o calc_mean.o gcc -shared -Wl,-soname,libmean.so.1 -o libmean.so.1.0.1 calc_mean.o代替這個,我用這些命令gcc -c -fPIC calc_mean.c -o calc_mean.o gcc -shared -Wl,-soname,libmean.so -o libmean.so calc_mean.o但是仍然收到相同的錯誤 – Savn

+0

@Savn,不能。 – SergeyA

+0

上午使用WIN7 .... – Savn

-1

您是否將libmean.so.1複製到/ usr/lib /(或)/ opt/lib /中?

+0

沒有幫助。錯誤的答案。 – SergeyA

1

當您嘗試通過提供-lmean來鏈接庫時,它會自動搜索libmean.so,但是您創建的庫爲libmean.so.1.0.1。這就是問題。請更改庫名稱或創建符號鏈接。

+0

gcc -c -fPIC calc_mean.c -o calc_mean.o gcc -shared -Wl,-soname,libmean.so.1 -o libmean.so.1.0.1 calc_mean.o代替這個,我用了這些命令gcc -c -fPIC calc_mean.c -o calc_mean。o gcc -shared -Wl,-soname,libmean.so -o libmean.so calc_mean.o但仍然收到相同的錯誤 – Savn