alg*_*uru 0 c++ linker symbols makefile undefined
我有两组文件:PolynomialArithmetic.h/cpp 和 Options.h/cpp
Options.h 定义为:
// Options.h
#ifndef Options_h
#define Options_h
#define BINARY_HEAP 0
inline int chosenHeap ();
#endif
Run Code Online (Sandbox Code Playgroud)
Options.cpp定义为:
// Options.cpp
#include "Options.h"
inline int chosenHeap() { return BINARY_HEAP; }
Run Code Online (Sandbox Code Playgroud)
PolynomialArithmetic.cpp 包含以下内容:
// PolynomialArithmetic.cpp
#include "PolynomialArithmetic.h"
#include "Options.h"
void foo () {
...
if (chosenHeap() == BINARY_HEAP) {
// DO SOMETHING
}
...
}
Run Code Online (Sandbox Code Playgroud)
当我编译时,我收到错误:
Undefined symbols for architecture x86_64:
"chosenHeap()", referenced from: foo() in PolynomialArithmetic.o
Run Code Online (Sandbox Code Playgroud)
我猜测这是某种链接错误。这是我编译代码的方式:
# 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
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
小智 5
内联函数必须位于标头中,因为它在 PolynomialArithmetic.cpp 编译期间必须可用。所以 header Options.h 必须看起来像
inline int chosenHeap() { return BINARY_HEAP; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1416 次 |
| 最近记录: |