gpt4 book ai didi

c - netbsd pthread_create SIGABRT

转载 作者:行者123 更新时间:2023-11-30 20:35:14 25 4
gpt4 key购买 nike

我们尝试将虚拟机移植到 Net Bsd 7.0 (amd64) 上。已经成功从 Linux 移植到 Free BSD 和 Open BSD 等。我们在全新标准安装 Net BSD 时遇到了几个问题。

  1. 代码是使用 gcc 和以下标志编译的:CC_OPTIONS=-pedantic -Wall -Wno-trigraphs -Wno-long-long -Wno-variadic-macros -fshort-wchar -x c++ -fPIC -pipe -fno-omit-frame-pointer -g -I"/usr/local "/include -I"$(UAS_SRC)"
    LD_OPTIONS=-shared-libgcc -L"/usr/lib"-L"/usr/local/lib"-L"$(UAS_HOME)vtm/lib"

  2. 当尝试使用 pthread_create() 创建线程时,进程会从 libc 运行时接收 SIGABRT :gdb 回溯:

    • 在/usr/lib/libc.so.12 的 _lwp_kill() 中
    • 在/usr/lib/libc.so.12 的 __lwd_thr_create_stub() 中
    • 在/usr/libpthread.so.1 的 _pthread_create() 中
    • 在/home/../syspsx_nt.cpp 中的 CreerThread2() 中
  3. 当尝试使用自旋锁时,我们收到段违规。这是测试用例:

    typedef 结构tymttsysnatsynchronizationdirect
    {
    联盟

      {
      pthread_spinlock_t HandleSpinLock;
      } 选择;
    *TypMttSysNatSynchronizationDirect;

    TypMttSysNatSynchronization直接同步Courant;
    int 响应;

    SynchronizationCourant=(TypMttSysNatSynchronizationDirect)malloc(sizeof(structtypmttsysnatsynchronizationdirect));
    if (SynchronizationCourant==NULL)
      返回(0);
    memset(SynchronizationCourant, 0x0, sizeof(structtymttsysnatsynchronizationdirect));
    响应=pthread_spin_init(&(SynchronizationCourant->Selection.HandleSpinLock), PTHREAD_PROCESS_SHARED);
    if(响应!=0)
      返回(0);
    响应=pthread_spin_lock(&(SynchronizationCourant->Selection.HandleSpinLock));
    if(响应!=0)
      返回(0);

反汇编pthread_spin_init()和pthread_spin_lock()的代码时,发现pthread_spinlock内部有一个函数指针,在pthread_spin_init()中被设置为NULL,并间接调用到pthread_spinlock()调用的pthread_spintrylock()中。

感谢您的帮助。

最佳答案

似乎每个模块都被编译器标记(gcc)是否与多线程兼容,并且生成的代码也相应地略有变化。而且您不能将两种模块混合到一个可执行文件中。特别是如果您使用 dlopen() 动态加载一些共享对象。

由于msvc有/Mt选项,gcc有-pthread,但Net BSD不可用。而且在其他平台上是没有用的。

解决方法是将 libpthread.so 系统地链接到每个模块。然后每个模块都被标记为具有兼容的多线程。这两个问题就结束了。

关于c - netbsd pthread_create SIGABRT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40020505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com