gpt4 book ai didi

c++ - 如何使用 libtool 创建二进制文件和 .so

转载 作者:可可西里 更新时间:2023-11-01 16:37:55 30 4
gpt4 key购买 nike

我有一组 cpp 文件,我想直接编译成二进制文件,也想编译成共享库。

我有

bin_PROGRAMS=mybin
lib_LTLIBRARIES=libmylib.la

COMMON_SOURCES=f1.cpp f2.cpp f3.cpp

mybin_SOURCES=main.cpp $(COMMON_SOURCES)
libmylib_la_SOURCES=$(COMMON_SOURCES)

当我运行它时,cpp 文件被编译两次,一次使用 libtool,一次不使用,有时 libtool/automake 会报错

Makefile.am: object `f1.$(OBJEXT)' created both with libtool and without`

我尝试将 COMMON_SOURCES 放入 .a 文件中,但是当我将 .a 与 .la 链接时 libtool 会提示(说它不可移植)。

我需要的是类似的东西

bin_LTPROGRAMS=mybin

但这不存在

编辑:澄清 - 我正在使用 automake/autoconf。我上面显示的是我的 automake Makefile.am 的内容

最佳答案

具体链接到公共(public)资源库:

bin_PROGRAMS = mybin
lib_LTLIBRARIES = libmylib.la

mybin_SOURCES = main.cpp
mybin_LDADD = libmylib.la
libmylib_la_SOURCES = f1.cpp f2.cpp f3.cpp

如果 libmylib.la 最终使用了不应链接到 mybin 的文件,则创建一个 libtool convenience library ,使用类似这样的 Makefile.am:

bin_PROGRAMS = mybin
noinst_LTLIBRARIES = libcommon.la
lib_LTLIBRARIES = libmylib.la

mybin_SOURCES = main.cpp
mybin_LDADD = libcommon.la

libmylib_la_SOURCES = f4.cpp f5.cpp f6.cpp
libmylib_la_LIBADD = libcommon.la

libcommon_la_SOURCES = f1.cpp f2.cpp f3.cpp

这将链接 f1.cpp, f2.cpp, f3.cpp, f4.cpp, f5.cppf6.cpplibmylib.lamain.cpp, f1.cpp , f2.cppf3.cppmybin.

关于c++ - 如何使用 libtool 创建二进制文件和 .so,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3604291/

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