继续我的移植项目......尝试使用Visual Studio 2013 Pro在Windows上运行Linux C ++应用程序。
这是一个多线程的应用程序,所以我带来了pthread-win32。它也使用MySQL,所以我也安装了二进制32位MySQL C Connector library。
在VS尝试链接之前,一切都很顺利。然后我明白了:
pthreadVSE2.lib(pthreadVSE2.dll) : error LNK2005: _pthread_exit already defined in mysqlclient.lib(my_winthread.obj)
pthreadVSE2.lib(pthreadVSE2.dll) : error LNK2005: _pthread_join already defined in mysqlclient.lib(my_winthread.obj)
pthreadVSE2.lib(pthreadVSE2.dll) : error LNK2005: _pthread_create already defined in mysqlclient.lib(my_winthread.obj)
事实证明MySQL开发人员遇到了同样的问题(在Windows上缺少pthread),因此他们将部分pthread库转移到他们的库中(或使用相同的函数名称/签名自行编译 - 我没有看起来很近)。
但它只是其中的一部分 - 我尝试从链接中删除pthread-win32,认为可能mysqlclient库中嵌入了所有pthreads - 但这会产生大量未解析的符号。
有关如何解决此问题的任何建议?在这里完成Windows开发者新手,所以没有任何建议是愚蠢的!
由于
答案 0 :(得分:0)
好的,如果有人遇到同样的问题,请问我是如何解决的。我进入MySQL连接器源代码并重命名了多重定义的函数并重新编译了库。
pthread_exit() renamed to mysql_pthread_exit()
pthread_join() renamed to mysql_pthread_join()
pthread_create() renamed to mysql_pthread_create()
声明在include / my_pthread.h中,mysys / my_winthread.c中的实现它们不会在库中的任何地方被调用。
这允许干净的编译和链接。 MySQL的东西不在我的代码的多线程部分,它似乎工作正常。
它不是一个理想的解决方案,因为我现在必须推车修改版本的MySQL连接器库,并在新版本发布时重新执行mod。但它现在有效。