[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

KDE2



こんにちは。斉藤です。あいかわらず NetBSD-1.4.2を使ってます。

KDE(http://www.kde.gr.jp/index.php3)に興味があって、
qt-2.2.2, kdesupport-2.0, kdelibs-2.0, kdebase-2.0と、
ソースからコンパイルして、動作テストしたのですが、
最初はなかなか動きませんでした。
最近やっとそれらしい動きをするようになったのですが、
動かない原因がNetBSD-1.4.2にあり、
NetBSD-1.5だと解消されているのかなと思いお尋ねした次第です。

ちなみに環境は、
gcc-2.95.2, mips-elf, X11R6.5.1(Xserverは別マシン),
日本語localeはFreeBSDからlibxpg4-3.3をインストール。

標準のNetBSDの環境でないので、そのことが原因で
症状が出ている可能性があります。
その場合はご容赦下さい。

問題点1
mkdir("/tmp/xxx/", 0x1c0);
のように、ファイル名の最後に'/'が付くとerrnoが2のエラーとなりますか?
他のUNIXでは正常にmkdirできるようです。

問題点2
sss.c, xxx.c, yyy.cの添付ファイルを次のようにコンパイルし
実行してみていただけないでしょうか。

gcc -o sss sss.c -g
gcc -c xxx.c yyy.c -g
ld -shared -o libsss.so /usr/lib/crtbegin.o xxx.o yyy.o /usr/lib/crtend.o

% sss <return>
c_init0
c_init1
c_init2
c_init3
sss_hello
dlopen test
cx_init0
cx_init1
cx_init2
cx_init3
cy_init0
cy_init1
cy_init2
cy_init3
p = 0x20004a00
s = 0x201b0cac
xxx_hello
yyy_hello
d_init1
d_init0
dy_init1
dy_init0
dx_init1
dx_init0

これはダイナンミックリンカーの機能テストです。
ld -shared -o libsss.so xxx.o yyy.o
だけでシェアードライブラリを作ってしまうと実行結果は
% sss <return>
c_init0
c_init1
c_init2
c_init3
sss_hello
dlopen test
p = 0x20004a00
s = 0x201b0a68
xxx_hello
yyy_hello
d_init1
d_init0

となり、正しくありません。
この問題は未解決です
(他のUNIXはシェアードライブラリを作る時に
crtbegin.o, crtend.oをリンクしないようです)。

sss.c--------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

void d_init0(){	write(1, "d_init0\n", 9);}
void d_init1(){	write(1, "d_init1\n", 9);}
void c_init0(){	write(1, "c_init0\n", 9);}
void c_init1(){	write(1, "c_init1\n", 9);}
void c_init2(){	write(1, "c_init2\n", 9);}
void c_init3(){	write(1, "c_init3\n", 9);}

static void (*__CTOR_LIST__[]) __P((void))
    __attribute__((section(".ctors"))) = { c_init0, c_init1, c_init2, c_init3 };
static void (*__DTOR_LIST__[]) __P((void))
    __attribute__((section(".dtors"))) = { d_init0, d_init1 };

sss_main(){	printf("sss_hello\n");}

#include <dlfcn.h>

main()
{
	int p, s;

	sss_main();

	printf("dlopen test\n");
	p = dlopen("/usr/user/saito/debug/init/libsss.so", RTLD_NOW);
	printf("p = 0x%x\n", p);
	s = dlsym(p, "main");
	printf("s = 0x%x\n", s);
	((int (*)())s)();
}

xxx.c--------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

void dx_init0(){	write(1, "dx_init0\n", 9);}
void dx_init1(){	write(1, "dx_init1\n", 9);}
void cx_init0(){	write(1, "cx_init0\n", 9);}
void cx_init1(){	write(1, "cx_init1\n", 9);}
void cx_init2(){	write(1, "cx_init2\n", 9);}
void cx_init3(){	write(1, "cx_init3\n", 9);}

static void (*__CTOR_LIST__[]) __P((void))
    __attribute__((section(".ctors"))) = { cx_init0, cx_init1, cx_init2, cx_init3 };
static void (*__DTOR_LIST__[]) __P((void))
    __attribute__((section(".dtors"))) = { dx_init0, dx_init1 };

xxx_main(){	printf("xxx_hello\n");}

main()
{
	xxx_main();
	yyy_main();
}

yyy.c--------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

void dy_init0(){	write(1, "dy_init0\n", 9);}
void dy_init1(){	write(1, "dy_init1\n", 9);}
void cy_init0(){	write(1, "cy_init0\n", 9);}
void cy_init1(){	write(1, "cy_init1\n", 9);}
void cy_init2(){	write(1, "cy_init2\n", 9);}
void cy_init3(){	write(1, "cy_init3\n", 9);}

static void (*__CTOR_LIST__[]) __P((void))
    __attribute__((section(".ctors"))) = { cy_init0, cy_init1, cy_init2, cy_init3 };
static void (*__DTOR_LIST__[]) __P((void))
    __attribute__((section(".dtors"))) = { dy_init0, dy_init1 };

yyy_main(){	printf("yyy_hello\n");}