我正在使用boost 1.47 for Arm,使用Code Sourcery C++编译器(4.5.1),从Windows 7开始针对Ubuntu进行交叉编译.
当我们编译调试版本(即启用了断言)时,会触发一个断言:
pthread_mutex_lock.c:62: __pthread_mutex_lock: Assertion 'mutex->__data.__owner == 0' failed.
Run Code Online (Sandbox Code Playgroud)
在发布模式下编译时,不会触发断言并且程序正常工作(据我们所知).
这是在Ubuntu 10.x Arm板下发生的.
因此,似乎pthread_mutex_lock认为互斥锁是由与当前线程不同的线程设置的.在我的程序中,我们仍然是单线程的,通过在main中打印出pthread_self来验证,并且在调用正则表达式构造函数之前.也就是说,断言不应该失败.
下面是触发问题的代码片段.
// Set connection server address and port from a URL
bool MyHttpsXmlClient::set_server_url(const std::string& server_url)
{
#ifdef BOOST_HAS_THREADS
cout <<"Boost has threads" << endl;
#else
cout <<"WARNING: boost does not support threads" << endl;
#endif
#ifdef PTHREAD_MUTEX_INITIALIZER
cout << "pthread mutex initializer" << endl;
#endif
{
pthread_t id = pthread_self();
printf("regex: Current threadid: %d\n",id);
}
const boost::regex e("^((http|https)://)?([^:]*)(:([0-9]*))?"); // 2: …Run Code Online (Sandbox Code Playgroud) 我们有一个由FTDI的D2XX驱动程序控制的USB设备.它目前通过Python界面从Windows机器控制,作为一个有趣的项目,我尝试将控件移动到Raspberry Pi(大约是PC成本的十分之一,不包括操作系统成本).
有许多障碍需要澄清,但几周之后我终于找到了所有的答案,并让它发挥作用.答案分布在几个论坛上,感谢Stack Overflow社区,我想我会在这里整合它们.
首先,项目要求:
我下载了Wheezy发行版,并使用Win32DiskImager写入4 GB SD卡.Raspberry Pi启动时没有任何问题.然后我解压缩了D2XX库(libftd2xx.so)并将其安装到/usr/local/lib.
PyUSB(1.6)目前仅针对Windows进行测试,但它们提供源代码.编译Raspberry Pi的副本非常简单.基本上,修改setup.py以链接到libftd2xx.so库(无需复制它).同时编辑d2xx/_d2xx.c以注释掉没有Linux实现的例程(目前为ftobj_Rescan,ftobj_Reload ftobj_GetComPortNumber).将WinTypes.h和ftd2xx.h从FTDI D2XX驱动程序下载(在发行版中)目录复制到ftdi-win32并运行python setup.py install,它将编译并安装Python模块.
完成所有操作后,我编写了一个简单的Python脚本来与FTDI芯片进行通信.注意你需要通过sudo运行.
import d2xx
jd = d2xx.open(0)
pd = jd.eeRead()
print pd
Run Code Online (Sandbox Code Playgroud)
d2xx模块似乎无法找到libftd2xx.so文件.因此,我调整了setup.py脚本以链接到库的静态副本libftd2xx.a.我有第一个问题的线索:D2XX库是使用soft-float构建的,我的Wheezy发行版配置为使用浮点寄存器.也就是说,我系统上的gcc生成的代码与D2XX库不兼容,并且不允许它们链接到.
为了解决这个问题,我下载了soft-float debian"wheezy"发行版(2012-08-08)并写入4 GB SD卡.这次图像无法启动.环顾四周后,我找到了这个有用的答案.简而言之,软浮动的启动映像存在问题,因此对于某些Raspberry Pi板,它将无法启动.解决方案是将软浮动分布上的start.elf文件替换为可以工作的文件,例如来自硬浮动Raspbian图像的副本.幸运的是,SD卡有两个分区:FAT 1和ext3(?).启动映像在FAT分区上,因此将硬浮SD卡弹出到Windows框中,复制start.elf文件,弹出软浮SD卡并用硬盘更新它的start.elf是微不足道的. - 浮动一个.之后,Raspberry Pi启动没问题.
安装FTDI的D2XX驱动程序并从PyUSB构建d2xx Python模块后,我再次尝试了测试脚本.再次失败了.d2xx模块可以读取libftd2xx.so库没问题,但由于某种原因可能无法与设备通信.