如何在 C 中使用 gcc link 子文件夹?
How to link a subfolder with gcc in C?
我有下面的树:
├── 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
中,我从 greeter.c
调用函数,从 cminpack/hybrd.c
调用函数 hybrd_
。我想 link greeter
和 cminpack
我的 swaps
.
我通过 运行 下面的 gcc 命令设法 link greeter
:
sudo gcc -c swaps.c greeter.c ;sudo gcc -o swaps swaps.c greeter.c -lm ;./swaps
现在如果我尝试 link cminpack
我是 运行 下面的 gcc 命令:
sudo gcc -c swaps.c greeter.c -I./cminpack;sudo gcc -o swaps swaps.c greeter.c -lm -L /cminpack
这会导致臭名昭著的 linking 错误:
/usr/bin/ld: /tmp/ccxwxt6A.o: in function `fsolve':
swaps.c:(.text+0xfb3): undefined reference to `hybrd_'
collect2: error: ld returned 1 exit status
如何 link 子文件夹?
(gcc 版本 10.2.1 20210110 (Debian 10.2.1-6))
除-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
我有下面的树:
├── 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
中,我从 greeter.c
调用函数,从 cminpack/hybrd.c
调用函数 hybrd_
。我想 link greeter
和 cminpack
我的 swaps
.
我通过 运行 下面的 gcc 命令设法 link greeter
:
sudo gcc -c swaps.c greeter.c ;sudo gcc -o swaps swaps.c greeter.c -lm ;./swaps
现在如果我尝试 link cminpack
我是 运行 下面的 gcc 命令:
sudo gcc -c swaps.c greeter.c -I./cminpack;sudo gcc -o swaps swaps.c greeter.c -lm -L /cminpack
这会导致臭名昭著的 linking 错误:
/usr/bin/ld: /tmp/ccxwxt6A.o: in function `fsolve':
swaps.c:(.text+0xfb3): undefined reference to `hybrd_'
collect2: error: ld returned 1 exit status
如何 link 子文件夹?
(gcc 版本 10.2.1 20210110 (Debian 10.2.1-6))
除-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