linux - 你能帮帮我吗,如何解决与在 Linux、Cygwin(Windows) 上工作的 (.a) 文件相关的 Makefile 错误

标签 linux ubuntu gcc makefile

你能帮我解决与 Makefile 相关的问题吗(Linux,Cygwin)。我想使用 Makefile 制作二进制文件。 我目前正在进行一个关于 3d 重建的项目。我使用过 Linux(Ubuntu) 和 Cygwin(Windows)。 当我使用源代码中包含的 Makefile 时出现了一些问题。(我从网上收到)。我在命令行输入“make”,但出现与 Make 相关的错误。这是这些。

[类型1]

make[1]: Entering directory `/home/curtis/bundlersrc/lib/5point'
make[1]: Nothing to be done for `all'.
make[3]: Entering directory `/home/curtis/bundlersrc/lib/ann_1.1_char/src'
make[3]: Nothing to be done for `targets'.
make[1]: Entering directory `/home/curtis/bundlersrc/lib/imagelib'
make[1]: Nothing to be done for `all'.

[Type2]

BundlerApp.h:620:32: error: cannot call constructor ‘SkeletalApp::BundlerApp’ directly [-fpermissive]
BundlerApp::BundlerApp();                              ^
BundlerApp.h:620:32: error:   for a function-style cast, remove the     redundant ‘::BundlerApp’ [-fpermissive]
BundlerApp.cpp: In member function ‘virtual void     BundlerApp::ProcessOptions(int, char**)’:

[Type3]

make[1]: Leaving directory `/home/curtis/bundlersrc/src'
make: *** [default] Error 2

其中一个 Make 文件包含这些 shell 代码

LIB = lib5point.a

TARGET = $(LIB)
OBJS = 5point.o poly1.o poly3.o

CC=gcc
OPTFLAGS=-O3
OTHERFLAGS=-Wall

MATRIX_PATH=../matrix
IMAGELIB_PATH=../imagelib

CPPFLAGS = $(OTHERFLAGS) $(OPTFLAGS) -I$(MATRIX_PATH) -I$(IMAGELIB_PATH)

all: $(TARGET)

$(TARGET): $(OBJS)
    ar r $@ $(OBJS)
    cp $@ ..

clean: 
    rm -f $(TARGET) *.o *~

我不明白为什么会出现关于 (.a) 文件的错误。有什么问题吗?


顶级 Makefile 包含这些代码

ANN_TARGET = linux-g++-shared

OS = $(shell uname -o)
ifeq ($(OS), Cygwin)
ANN_TARGET = win32-g++-shared
endif

default:
# Make libraries
    cd lib/5point; $(MAKE)
    cd lib/ann_1.1_char; $(MAKE) $(ANN_TARGET)
    cd lib/imagelib; $(MAKE)
    cd lib/matrix; $(MAKE)
    cd lib/sba-1.5; $(MAKE)
    cd lib/sfm-driver; $(MAKE)
# Auxiliary libraries
    cd lib/lapack; $(MAKE)
    cd lib/minpack; $(MAKE)
    cd lib/blas; $(MAKE)
    cd lib/cblas; $(MAKE)
    cd lib/f2c; $(MAKE)
# Main program
    cd src; $(MAKE)


clean:
    cd lib/5point; $(MAKE) clean
    cd lib/ann_1.1_char; $(MAKE) clean
    cd lib/imagelib; $(MAKE) clean
    cd lib/matrix; $(MAKE) clean
    cd lib/sba-1.5; $(MAKE) clean
    cd lib/sfm-driver; $(MAKE) clean
    cd lib/lapack; $(MAKE) clean
    cd lib/minpack; $(MAKE) clean
    cd lib/blas; $(MAKE) clean
    cd lib/cblas; $(MAKE) clean
    cd lib/f2c; $(MAKE) clean
    cd src; $(MAKE) clean
    rm -f bin/bundler bin/KeyMatchFull
    rm -f lib/*.a`

感谢阅读我的问题,

最佳答案

所有这些都不是 make 错误。让我们看看我们有什么:

  • make[1]: 无事可做

要成为一个有效的工具,请查看目标文件是否已经存在以及它们是否是最新的(最后修改时间)。如果您的所有目标都存在并且是最新的,则您不必运行指定的命令,make 将报告 Nothing to be done for $target

  • make: *** [默认] 错误 2

这意味着发出的一个命令以代码 2 退出(它不是 0,因此被认为是失败)。要解决此问题,您必须查看命令 gcc。您在类型 2 中看到什么是错误的,一个编程错误,如果您不提供代码则不容易解决。

  • 进入/离开目录$dir

这里也没什么可担心的。这只是一条信息消息,告诉您 make 当前正在做什么。

我觉得你的 Makefile 没问题。只需修复您的代码 (BundlerApp) 就可以了。仅通过查看 gcc 错误,也许这会有所帮助:C++ Cannot call constructor ' ' directly但正如我所说,没有实际代码,它只是猜测。

关于linux - 你能帮帮我吗,如何解决与在 Linux、Cygwin(Windows) 上工作的 (.a) 文件相关的 Makefile 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33804263/

相关文章:

linux - 如何打印索引为 24 的文件描述符总数

linux - 将指定文件夹中的所有文件向上移动一个目录

使用 xampp (ubuntu) 时 php-linter 的 Php 可执行文件不工作

c - 使用vpath查找生成的文件

c - 如何在内联汇编中使用 C 中声明的变量

linux - 如何使用 wget 保存网页及其对象?

linux - 如何使用 python crypt 或 bcrypt 为 useradd 创建加密密码?

django - SQLite3 ".tables"什么也不返回

asp.net - 无法在 Ubuntu 中使用 FlatPak 获取 Monodevelop 以运行 ASP.NET 站点

c++ - Solaris 中的 SH_DENY* 等价物