c++ - 从另一个文件调用 C++ 函数时出现 "Undefined Symbols"

标签 c++ linker makefile undefined symbols

我有两组文件:PolynomialArithmetic.h/cpp 和 Options.h/cpp

Options.h 定义为:

// Options.h

#ifndef Options_h
#define Options_h

#define BINARY_HEAP 0

inline int chosenHeap ();


#endif

Options.cpp 定义为:

// Options.cpp

#include "Options.h"

inline int chosenHeap() { return BINARY_HEAP; }

PolynomialArithmetic.cpp 包含以下内容:

// PolynomialArithmetic.cpp

#include "PolynomialArithmetic.h"
#include "Options.h"

void foo () {
...
    if (chosenHeap() == BINARY_HEAP) {
        // DO SOMETHING
    }
...
}

编译时出现错误:

Undefined symbols for architecture x86_64:
    "chosenHeap()", referenced from: foo() in PolynomialArithmetic.o

我猜这是某种链接错误。这是我编译代码的方式:

# Makefile

# some configs
....

main: Options.o PolynomialArithmetic.o
    $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $^ -o $@ $(LDLIBS)


Options.o: Options.h Options.cpp
    $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c Options.cpp

PolynomialArithmetic.o: PolynomialArithmetic.cpp PolynomialArithmetic.h Options.h
    $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c PolynomialArithmetic.cpp 

有什么想法吗?

最佳答案

内联函数必须在 header 中,因为它在 PolynomialArithmetic.cpp 的编译过程中必须可用。 所以标题 Options.h 必须看起来像

inline int chosenHeap() { return BINARY_HEAP; }

关于c++ - 从另一个文件调用 C++ 函数时出现 "Undefined Symbols",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11291535/

相关文章:

boost - boost::hash_combine 链接哪个库

c++ - LIBSSL 静态库 fpic 编译问题

c++ - 模板:父类成员变量在继承类中不可见

c++ - 噪音功能实际上是如何工作的?

c++ - 使用 dlopen 加载派生多态类

c++ - 如何用我自己的可靠地替换库定义的错误处理程序?

linux - 从 C 源文件生成 LLVM 位码文件的 CMakeList 文件

c++ - 来自 cudaMemcpy2D 的错误数据

c++ - glBlitFramebuffer 无效操作

c++ - 如何将 `std::chrono::milliseconds` 转换为 `boost::posix_time::milliseconds`