无法编译在cpp中使用其他模块的程序

Cannot compile program which uses another module in cpp

提问人:Sumit Patil 提问时间:10/3/2023 最后编辑:JabberwockySumit Patil 更新时间:10/7/2023 访问量:78

问:

我正在编写一个 cpp 程序,我想在其中包含另一个自定义库,这样我就不需要添加多个文件等进行编译。 我的项目结构是:

apps/
    - /test
    - /test2

我在 test2 的 makefile 中包含了测试库:

STATIC_LIBS     += test
CFLAGS          += -I$(SWIFT_ROOT)/apps/test/
LDFLAGS         += -L$(SWIFT_ROOT)/apps/test

但是在编译时我仍然收到此错误:

/usr/bin/ld: cannot find -ltest
collect2: error: ld returned 1 exit status

生成文件:

ENABLE_VERSION_API=1

TARGET = test2

SRCS += \
        main.cpp \
        test2.cpp \
        \
        # Add more

LIBS            +=
STATIC_LIBS     += test
EXT_STATIC_LIBS += ssl crypto ssh2 curl protobuf
EXT_LIBS        += z

CFLAGS    += -I$(SWIFT_ROOT)/include/google/protobuf/
CFLAGS    += -I$(SWIFT_ROOT)/libs/src/test2/
CFLAGS    += -I$(SWIFT_ROOT)/apps/test/
LDFLAGS   += -L$(SWIFT_ROOT)/apps/test
include $(SWIFT_ROOT)/build/app.mak

执行命令 -

    g++ -I/root/include/google/protobuf/ - 
   I/root/libs/src/test2/  -std =c++17 -Wno-unused-but- 
   set-variable -Wno-misleading-indentation -Wno-deprecated- 
   declarations -Wno-parentheses -Wno-switch -Wno-literal    -suffix - 
   Wno-conversion-null -Wno-format-contains-nul  -D_THREAD_SAFE - 
   D_GNU_SOURCE -D__USE_GNU .builtobjs/main.o .builtobjs/test2.o -L 
   /root/apps/test -Xlinker --start-group -lz -ldl 
   -lpthread     -lrt -luuid -lstdc++fs -Wl,-Bstatic -lssl -lcrypto - 
   lssh2 -lcurl -lprotobuf -ltest -Wl,-Bdynamic - 
   Xlinker --end-grou    p -Wl,-rpath,/opt/swift/lib64 -Wl,- 
   rpath,/opt/swift/lib -o test2

在这里,我的主要问题是如何在另一个模块中添加自定义库。我遵循了标准步骤,例如包括 LIB,然后是 CFLAG (-I) 和 LDFLAG (-L)。但是这里还需要做其他改进吗?

C++ C GCC Makefile

评论

0赞 kiner_shah 10/3/2023
显示编译命令。
0赞 Sumit Patil 10/3/2023
@kiner_shah 它是一个 makefile。我只是使用这些标志执行 make
2赞 Some programmer dude 10/3/2023
从完全清理开始,请执行一个详细的构建,显示正在构建的库。然后将完整(详细)输出复制粘贴到您的问题中,以便我们可以看到实际执行的命令。
1赞 HolyBlackCat 10/3/2023
从何而来?build/app.mak
3赞 HolyBlackCat 10/3/2023
您的命令仅显示将其传递给链接器。但是谁创造的,它到底被创造了吗?-ltestlibtest.a

答:

-1赞 Sumit Patil 10/7/2023 #1

正如一些人所指出的。我的目录中没有 .a 文件。使用 ar 命令生成它,现在工作正常。