gpt4 book ai didi

python - Makefile 编译二进制文件,不是可执行文件

转载 作者:行者123 更新时间:2023-11-30 00:44:35 24 4
gpt4 key购买 nike

当我在 make 之后运行可执行文件时,bash 引发以下错误:

$ ./prog 
-bash: ./prog: cannot execute binary file

我的生成文件:

CC = g++ -std=c++11
LDFLAGS = -undefined dynamic_lookup -bundle
OBJ = main.o datetime.o logger.o WeatherApi.o tinyxml2.o tflower.o tservo.o


prog: $(OBJ)
$(CC) -o $@ $(OBJ) $(LDFLAGS)

%.o: %.cpp
$(CC) -c $<

clean:
rm -r *.o

我做错了什么?


更新 2:

感谢您的 comment SergayA.在 this article 的帮助下链接 python 之后它有效。


更新 1:

我在一些评论后删除了 -undefined dynamic_lookup -bundle 标志,所以我遇到了 Python 问题。要使用 Python.h,我将环境变量设置为此路径:CPLUS_INCLUDE_PATH=/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/

2 warnings generated.
g++ -std=c++11 -c datetime.cpp
g++ -std=c++11 -c logger.cpp
g++ -std=c++11 -c WeatherApi.cpp
g++ -std=c++11 -c tinyxml2.cpp
g++ -std=c++11 -c tflower.cpp
g++ -std=c++11 -c tservo.cpp
g++ -std=c++11 -o prog main.o datetime.o logger.o WeatherApi.o tinyxml2.o tflower.o tservo.o
Undefined symbols for architecture x86_64:
"_PyDict_GetItemString", referenced from:
WeatherApi::SayHelloWorld() in WeatherApi.o
WeatherApi::GetAirTemperature() in WeatherApi.o
"_PyErr_Print", referenced from:
WeatherApi::WeatherApi(char*, char*) in WeatherApi.o
WeatherApi::GetAirTemperature() in WeatherApi.o
"_PyImport_Import", referenced from:
WeatherApi::WeatherApi(char*, char*) in WeatherApi.o
"_PyModule_GetDict", referenced from:
WeatherApi::WeatherApi(char*, char*) in WeatherApi.o
"_PyObject_CallObject", referenced from:
WeatherApi::SayHelloWorld() in WeatherApi.o
WeatherApi::GetAirTemperature() in WeatherApi.o
"_PyString_AsString", referenced from:
WeatherApi::GetAirTemperature() in WeatherApi.o
"_PyString_FromString", referenced from:
WeatherApi::WeatherApi(char*, char*) in WeatherApi.o
WeatherApi::GetAirTemperature() in WeatherApi.o
"_PyTuple_New", referenced from:
WeatherApi::GetAirTemperature() in WeatherApi.o
"_PyTuple_SetItem", referenced from:
WeatherApi::GetAirTemperature() in WeatherApi.o
"_Py_Finalize", referenced from:
WeatherApi::~WeatherApi() in WeatherApi.o
"_Py_Initialize", referenced from:
WeatherApi::WeatherApi(char*, char*) in WeatherApi.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [prog] Error 1

最佳答案

What did i wrong?

由于您显然想要一个可以直接执行的程序,所以您做错的是指定 the -bundle option至 g++。这指示它输出应该是 Mach-o bundle 格式 文件。这些文件不能直接执行。它们可以在运行时通过系统的动态链接功能加载到另一个程序中,可用于实现插件和类似的程序功能。删除此选项。

-undefined dynamic_lookup 看起来也很可疑。我猜您是从其他 Makefile 复制了那个和 -bundle 选项。如果您不知道它的用途,那么您也应该放弃它。

关于python - Makefile 编译二进制文件,不是可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48191350/

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