此代码原本用于复现C++线程在执行时使用已销毁对象出现的问题. 但是还没有进行复现, 编译的时候就出现了not found for architecture x86_64 问题
主要涉及3个类, ThreadRun.h, ThreadRun.cpp, 及主调代码 main.cpp.
main.cpp 主要功能是创建一个线程, 线程中执行的主要逻辑写在了 ThreadRun.cpp 中.
源代码:
#ifndef ADF_THREADRUN_H
#define ADF_THREADRUN_H
#include <iostream>class ThreadRun {
public:
void func();
};#endif //ADF_THREADRUN_H
#include "ThreadRun.h"
using namespace std;
void ThreadRun::func() {cout << "Thread: " << this_thread::get_id() << " start" << endl;cout << "Thread: " << this_thread::get_id() << " end" << endl;
}
Main.h文件内容如下:
#include <thread>
#include <iostream>
#include "24110601类成员函数作为线程入口函数执行时类被释放/ThreadRun.h"
using namespace std;
int main() {shared_ptr<ThreadRun> myClass2 = make_shared<ThreadRun>();thread t2(&ThreadRun::func, myClass2);cout << "Main方法执行完成" << endl;return 0;
}
就这样一套代码, 看着没什么问题,结果编译的时候出现了:not found for architecture x86_64
解
发现是ThreadRun.cpp中代码有误, 并没有引入thread的头文件却调用了thread相关方法, 解决方案是 添加thread头文件
#include "ThreadRun.h"
//添加此行代码
#include <thread>
using namespace std;
void ThreadRun::func() {cout << "Thread: " << this_thread::get_id() << " start" << endl;cout << "Thread: " << this_thread::get_id() << " end" << endl;
}
总结及扩展
用到了API但是没有引入头文件, 会出现 not found for architecture x86_64 报错
能引发这个报错的原因有很多很多, 以后遇见了再总结!但目前确定的一个原因是
● 源代码没有引入相应的头文件会引发此问题