【问题标题】:How to specify static linking in makefile?如何在makefile中指定静态链接?
【发布时间】:2012-09-25 22:06:14
【问题描述】:

我通常在运行配置脚本时使用“--enable-static”选项来静态链接生成的可执行文件。

但是,现在我正在尝试编译 g3data,它只带有一个 makefile(没有配置文件)。我尝试在 makefile 中添加“-bstatic”选项(“-static”选项在我的系统上不起作用:Mac OS X 10.6.8,请参阅here 以获得解释),但是编译成功并且我可以运行程序,它不是静态链接的……

我应该怎么做才能在这样的 makefile 中实现静态链接?这是我现在拥有的:

CC=gcc
CFLAGS=-Wall `pkg-config --cflags gtk+-2.0` -arch i386 -arch x86_64 -arch ppc -bstatic
LIBS=`pkg-config --libs gtk+-2.0`
LDFLAGS=-arch i386 -arch x86_64 -arch ppc -bstatic
#bindir ?= /usr/bin
#mandir ?= /usr/share/man

.c.o:
    $(CC) -c $(CFLAGS) $(CPPFLAGS) $<

all: g3data

g3data: main.o sort.o points.o drawing.o #g3data.1.gz
    $(CC) $(CFLAGS) -o g3data main.o sort.o points.o drawing.o $(LIBS) -bstatic
    strip g3data

main.o: main.c main.h strings.h vardefs.h

sort.o: sort.c main.h

points.o: points.c main.h

drawing.o: drawing.c main.h

#g3data.1.gz: g3data.sgml
#   rm -f *.1
#   onsgmls g3data.sgml | sgmlspl /usr/share/sgml/docbook/utils-0.6.14/helpers/docbook2man-spec.pl
#   gzip g3data.1

clean:
    rm -f *.o g3data g3data.1.gz *~ manpage.*

install:
    install g3data $(bindir)
    install g3data.1.gz $(mandir)/man1

uninstall:
    rm $(bindir)/g3data

【问题讨论】:

  • 通常 gcc 使用-static 标志进行静态链接——我希望-bstatic 会给你一个未知选项错误...
  • @ChrisDodd 是的,我从大多数来源中注意到您应该使用“-static”,但显然对于 OS X,您应该使用“-bstatic”。我在我的问题中添加了一个指向相关信息的链接。
  • 那么...您正在尝试静态链接到共享库?
  • @Beta 我正在尝试链接到 GTK2,但我不打算链接到共享库。但是,我承认我不熟悉 makefile。我的目标是创建一个静态链接的可执行文件,它可以独立于任何已安装的库运行。
  • 这不是生成文件问题,而是链接问题。如果这些库中的任何一个是共享库,它们不包含静态链接所需的所有信息;您需要库的静态版本。

标签: macos gcc makefile static-linking


【解决方案1】:

假设-bstatic 是您的链接器的正确选项,并且假设您确实有必要库的静态版本,我希望您需要将该选项放在$(LIBS) 列表之前之前 ,就好像它就像 GNU 链接器的 -Bstatic 选项一样,那么它只会影响在该选项之后列出的库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多