Undefined symbols for architecture x86_64错误原因
错误提示
Undefined symbols for architecture x86_64:
“CreateMyThread(void ()(void), void*)”, referenced from:
_main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
错误原因
在头文件中定义了inline函数,在cpp文件中实现
代码
MyThread.h:
inline ThreadID CreateThread(ThreadFunc p_func, void *p_param);
MyThread.cpp:
inline ThreadID CreateThread(ThreadFunc p_func, void *p_param) {
ThreadID t;
DummyData* data = new DummyData;
data->m_func = p_func;
data->m_data = p_param;
pthread_create(&t,0,DummyRun,data);
if( t== 0){
delete data;
}
return t;
}
错误解决
将inline函数放在头文件中
其它问题
void*转换成char
会提示error: cast from pointer to smaller type ‘char’ loses information;
因为指针类型的大小是根据操作系统的位数决定的,在64位系统里是8个字节,而char是4个字节。
不知道如何实现将空指针强制转化成字符型,尚待解决。
void PrintThread( void* data){
char c = (char)data;
for(int i = 0;i < 1000; i++){
cout << c;
cout.flush();
}
}