Undefined symbols for architecture x86_64错误

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();
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值