gpt4 book ai didi

gcc - 创建一个简单的 Makefile 来构建一个共享库

转载 作者:行者123 更新时间:2023-12-03 09:06:41 24 4
gpt4 key购买 nike

我正在尝试创建一个非常基本的手工制作的 Makefile 来创建一个共享库来说明一个观点。

这是我到目前为止:

SHELL = /bin/sh
CC = gcc
FLAGS = -std=gnu99 -Iinclude
CFLAGS = -fPIC -pedantic -Wall -Wextra -march=native -ggdb3
DEBUGFLAGS = -O0 -D _DEBUG
RELEASEFLAGS = -O2 -D NDEBUG -combine -fwhole-program

TARGET = example.so
SOURCES = $(shell echo src/*.c)
HEADERS = $(shell echo include/*.h)
OBJECTS = $(SOURCES:.c=.o)

PREFIX = $(DESTDIR)/usr/local
BINDIR = $(PREFIX)/bin

all: $(TARGET)

$(TARGET): $(OBJECTS)
$(CC) $(FLAGS) $(CFLAGS) $(DEBUGFLAGS) -o $(TARGET) $(OBJECTS)

当我跑 make ,它尝试构建一个应用程序 - 和 ld失败,因为它无法解析 main() .

问题似乎出在 CFLAGS - 我已指定 -fPIC但这不起作用 - 我做错了什么?

编辑

我添加了 -shared建议的标志,当我运行时 make ,我收到此错误:
gcc -std=gnu99 -Iinclude -fPIC -shared -pedantic -Wall -Wextra -march=native -ggdb3 -O0 -D _DEBUG -o example.so src/example.o
/usr/bin/ld: src/example.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
src/example.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [example.so] Error 1

这似乎暗示要恢复到 -fPIC只要。

顺便说一句,我的新 CFLAGS设置是:
CFLAGS       = -fPIC -shared -pedantic -Wall -Wextra -march=native -ggdb3

我在 Ubuntu 10.0.4 上运行 gcc v4.4.3。

最佳答案

解决方案是修改 XXFLAGS 如下:

FLAGS        = # -std=gnu99 -Iinclude
CFLAGS = -fPIC -g #-pedantic -Wall -Wextra -ggdb3
LDFLAGS = -shared

关于gcc - 创建一个简单的 Makefile 来构建一个共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8096015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com