[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");}
- Follow-Ups:
- Re: KDE2
- From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>