3

編集:これは、差し迫った解決策のない長期的な問題のようです: http ://d.puremagic.com/issues/show_bug.cgi?id=8133 http://www.digitalmars.com/d/archives/digitalmars/D /Ideas_for_runtime_loading_of_shared_libraries._154126.html http://lists.puremagic.com/pipermail/dmd-internals/2011-December/002853.html

acプログラムにロードされたaddylibでdランタイムを開始することに問題があるようです。Runtime.initialize()を呼び出すたびに、セグメンテーション違反が発生します。

Cコード:

#include <stdio.h>
#include <dlfcn.h>

int main() {
    void *library;
    int (*fptr)();
    library = dlopen("testlib.dylib", RTLD_LAZY);
    if(library == NULL)
        puts("couldn't load the library");
    else {
        *(void **)(&fptr) = dlsym(library,"number");
        if(fptr == NULL) {
        puts("couldn't load function");
        } 
        else {
            printf("the result is %d\n",(*fptr)());
        }
    }
    return(0);
}

gccでコンパイルされ、フラグはありません。

dコード:

import core.runtime;

extern(C) int number() {
    Runtime.initialize();
    return(4);
}

dmd-sharedでコンパイル

バックトレース:

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: 13 at address: 0x0000000000000000
0x000000010003de28 in __tls_get_addr ()
(gdb) bt
#0  0x000000010003de28 in __tls_get_addr ()
#1  0x000000010003cdfc in thread_attachThis ()
#2  0x000000010003ccb8 in thread_init ()
#3  0x000000010003e312 in gc_init ()
#4  0x0000000100044ff5 in rt_init ()
#5  0x000000010003b637 in D4core7runtime7Runtime10initializeFDFC6object9ThrowableZvZb ()
#6  0x0000000100034ee9 in number ()
#7  0x0000000100000e84 in main ()

すべてのコンパイルとデバッグはOSX10.7で行われます

注:Runtime.initialize();の場合 行がコメント化され、ライブラリがロードされ、正しく実行されます。

4

1 に答える 1

1

これは、github の最新の druntime で修正されました。

于 2012-07-11T12:45:24.137 に答える