Hom*_*lli 30 gcc makefile shared-libraries
我正在尝试创建一个非常基本的手工制作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)
Run Code Online (Sandbox Code Playgroud)
当我运行时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
Run Code Online (Sandbox Code Playgroud)
这似乎建议只回归-fPIC.
顺便说一下,我的新CFLAGS设置是:
CFLAGS = -fPIC -shared -pedantic -Wall -Wextra -march=native -ggdb3
Run Code Online (Sandbox Code Playgroud)
我在Ubuntu 10.0.4上运行gcc v4.4.3.
Hom*_*lli 27
解决方案是修改XXFLAGS如下:
FLAGS = # -std=gnu99 -Iinclude
CFLAGS = -fPIC -g #-pedantic -Wall -Wextra -ggdb3
LDFLAGS = -shared
Run Code Online (Sandbox Code Playgroud)
Ker*_* SB 15
编译-shared:
gcc -o libfoo.so module1.o module2.o -shared
Run Code Online (Sandbox Code Playgroud)
(这也适用于Windows下的MingW以生成DLL.)
小智 6
C ++文件示例。还包括一个干净的目标
.PHONY : clean
CPPFLAGS= -fPIC -g
LDFLAGS= -shared
SOURCES = $(shell echo *.cpp)
HEADERS = $(shell echo *.h)
OBJECTS=$(SOURCES:.cpp=.o)
FIKSENGINE_LIBDIR=../../../../lib
FIKSENGINE_INCDIR=../../../../include
TARGET=$(FIKSENGINE_LIBDIR)/tinyxml.so
all: $(TARGET)
clean:
rm -f $(OBJECTS) $(TARGET)
$(TARGET) : $(OBJECTS)
$(CC) $(CFLAGS) $(OBJECTS) -o $@ $(LDFLAGS)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
79915 次 |
| 最近记录: |