【问题标题】:Multiply defined symbols: mysqlclient, pthread-win32多重定义符号:mysqlclient、pthread-win32
【发布时间】:2016-01-25 21:06:02
【问题描述】:

继续我的移植项目...尝试使用 Visual Studio 2013 Pro 让 Linux C++ 应用程序在 Windows 上运行。

这是一个多线程应用程序,因此我将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 开发新手在这里,所以没有建议是愚蠢的!

谢谢

【问题讨论】:

    标签: c++ mysql windows visual-studio pthreads


    【解决方案1】:

    好的,如果有人遇到同样的问题,这就是我的解决方法。我进入 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。但它现在有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多