我有下面的樹:
├── cminpack
│ ├── hybrd.c
│ ├── hybrd.o
│ ├── hybrj1.c
│ ├── hybrj1.o
│ ├── hybrj.c
│ ├── hybrj.o
│ ├── libminpack.a
│ ├── Makefile
│ ├── minpack.h
│ ├── minpack.h.gch
│ ├── readmeC.txt
│ ├── readme.txt
├── greeter.c
├── greeter.h
├── greeter.o
├── swaps.c
├── swaps.h
├── swaps.o
檔案:
cminpack是我找到并復制的一個包,我可以make成功swaps.c是我所在的地方main,我也確實有以下內容:
#include "./cminpack/minpack.h"
#include "./greeter.h"
greeter.c是另一個具有某些功能的檔案
在swaps.c我呼叫函式 fromgreeter.c和函式hybrd_from cminpack/hybrd.c。我想將兩者鏈接greeter到cminpack我的swaps.
我設法greeter通過運行以下 gcc 命令進行鏈接:
sudo gcc -c swaps.c greeter.c ;sudo gcc -o swaps swaps.c greeter.c -lm ;./swaps
現在,如果我嘗試鏈接cminpack,我正在運行以下 gcc 命令:
sudo gcc -c swaps.c greeter.c -I./cminpack;sudo gcc -o swaps swaps.c greeter.c -lm -L /cminpack
這導致了臭名昭著的鏈接錯誤:
/usr/bin/ld: /tmp/ccxwxt6A.o: in function `fsolve':
swaps.c:(.text 0xfb3): undefined reference to `hybrd_'
collect2: error: ld returned 1 exit status
如何鏈接子檔案夾?
(gcc 版本 10.2.1 20210110 (Debian 10.2.1-6))
uj5u.com熱心網友回復:
除了-L cminpack,你應該添加-lminpack到gcc命令列。
應該沒有理由使用sudo這個程式的編譯,如果你不能gcc直接呼叫,你的系統配置錯誤,應該修復。強烈建議不要以 root 身份運行編譯器。
Makefile使用這些行在主目錄中創建一個:
%.o: %.c greeter.h swaps.h cminpack/minpack.h
gcc $(CFLAGS) -I cminpack -o $@ $*.c
swap: swap.o greeter.o cminpack/libminpack.a
gcc $(CFLAGS) -o $@ swaps.o greeter.o -L cminpack -lminpack -lm
cminpack/libminpack.a:
make -C cminpack
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/477688.html
