Ini adalah perintah perlsolaris yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, Windows online emulator atau MAC OS online emulator
PROGRAM:
NAMA
perlsolaris - Perl versi 5 pada sistem Solaris
DESKRIPSI
Dokumen ini menjelaskan berbagai fitur sistem operasi Solaris Sun yang akan
mempengaruhi bagaimana Perl versi 5 (selanjutnya hanya Perl) dikompilasi dan/atau dijalankan. Beberapa isu
berkaitan dengan SunOS 4.x yang lebih lama juga dibahas, meskipun mungkin sudah ketinggalan zaman.
Sebagian besar, semuanya harus berfungsi.
Dimulai dengan Solaris 8, perl5.00503 (atau lebih tinggi) disertakan dengan sistem operasi, jadi
Anda bahkan mungkin tidak perlu membuat versi Perl yang lebih baru sama sekali. Versi yang disediakan oleh Sun
diinstal di /usr/perl5 dengan /usr/bin/Perl menunjuk ke /usr/Perl5/bin/Perl. Tidak
ganggu instalasi itu kecuali Anda benar-benar tahu apa yang Anda lakukan. Jika Anda menghapus
perl yang disertakan dengan OS, Anda akan membuat beberapa bit sistem Anda tidak dapat dioperasikan. Jika kamu
ingin menginstal versi Perl yang lebih baru, instal di bawah awalan yang berbeda dari
/usr/perl5. Awalan yang umum digunakan adalah / usr / local dan /opt/perl.
Anda mungkin ingin menempatkan versi perl Anda di PATH semua pengguna dengan mengubah tautan
/usr/bin/Perl. Ini mungkin OK, karena sebagian besar skrip Perl yang dikirimkan bersama Solaris menggunakan
jalur eksplisit. (Ada beberapa pengecualian, seperti /usr/bin/rpm2cpio dan
/etc/rcm/scripts/README, tetapi ini juga cukup umum daripada versi sebenarnya
dari Perl mungkin tidak terlalu penting.)
Solaris dikirimkan dengan berbagai modul khusus Solaris. Jika Anda memilih untuk menginstal sendiri
versi perl Anda akan menemukan sumber dari banyak modul ini tersedia di CPAN
di bawah Matahari::Solaris:: namespace.
Solaris dapat menyertakan dua versi perl, misalnya Solaris 9 menyertakan 5.005_03 dan 5.6.1.
Ini untuk memberikan stabilitas di seluruh rilis Solaris, dalam kasus di mana versi Perl yang lebih baru
tidak kompatibel dengan versi yang disertakan dalam rilis Solaris sebelumnya. NS
versi perl default akan selalu menjadi yang terbaru, dan secara umum versi lama akan
hanya dipertahankan untuk satu rilis Solaris. Perhatikan juga bahwa perl default TIDAK akan
dikonfigurasi untuk mencari modul di versi yang lebih lama, sekali lagi karena
masalah kompatibilitas/stabilitas. Akibatnya jika Anda meningkatkan Solaris, Anda akan memiliki
untuk membangun kembali/menginstal ulang modul CPAN tambahan yang Anda instal sebelumnya
versi Solar. Lihat halaman manual CPAN di bawah 'autobundle' untuk cara cepat melakukan ini.
Sebagai tindakan sementara, Anda dapat mengubah #! baris skrip Anda secara khusus
lihat versi perl lama, misalnya pada Solaris 9 gunakan #!/usr/perl5/5.00503/bin/perl untuk menggunakan
versi perl yang merupakan default untuk Solaris 8, atau jika Anda memiliki banyak
skrip mungkin lebih mudah untuk menjadikan versi lama Perl sebagai default pada Anda
sistem. Anda dapat melakukan ini dengan mengubah symlink yang sesuai di bawah /usr/perl5 sebagai berikut
(contoh untuk Solaris 9):
# cd /usr/Perl5
#rm bin man pod
# ln -s ./5.00503/bin
# ln -s ./5.00503/man
# ln -s ./5.00503/lib/pod
#rm /usr/bin/Perl
# ln -s ../perl5/5.00503/bin/Perl /usr/bin/Perl
Dalam kedua kasus ini, ini hanya dianggap sebagai tindakan sementara - Anda harus
tingkatkan ke versi Perl yang lebih baru sesegera mungkin.
Perhatikan juga bahwa utilitas baris perintah perl (misalnya perldoc) dan semua yang ditambahkan oleh
modul yang Anda instal akan berada di bawah /usr/perl5/bin, sehingga direktori itu harus ditambahkan
ke PATH Anda.
Solaris Versi Angka.
Untuk konsistensi dengan penggunaan umum, skrip Konfigurasi Perl melakukan beberapa minor
manipulasi pada nama sistem operasi dan nomor versi seperti yang dilaporkan oleh uname.
Berikut adalah tabel terjemahan parsial:
Sun: perl Konfigurasi:
uname uname -r Nama osname osvers
SunOS 4.1.3 Solaris 1.1 sunos 4.1.3
SunOS 5.6 Solaris 2.6 Solaris 2.6
SunOS 5.8 Solaris 8 Solaris 2.8
SunOS 5.9 Solaris 9 Solaris 2.9
SunOS 5.10 Solaris 10 Solaris 2.10
Tabel lengkapnya dapat ditemukan di FAQ Sun Managers
<ftp://ftp.cs.toronto.edu/pub/jdd/sunmanagers/faq> di bawah "9.1) model Sun mana yang menjalankan yang
versi SunOS?".
SUMBER DAYA
Ada banyak, banyak sumber untuk informasi Solaris. Beberapa yang penting untuk
Profil:
FAQ Solaris
FAQ Solaris tersedia dihttp://www.science.uva.nl/pub/solaris/solaris2.html>.
FAQ Sun Managers tersedia di
<ftp://ftp.cs.toronto.edu/pub/jdd/sunmanagers/faq>
Binari yang telah dikompilasi sebelumnya
Binari yang telah dikompilasi, tautan ke banyak situs, dan banyak lagi tersedia di
<http://www.sunfreeware.com/> danhttp://www.blastwave.org/>.
Dokumentasi Solaris
Semua dokumentasi Solaris tersedia online dihttp://docs.sun.com/>.
SETTING UP
File Pencabutan Masalah on Solaris.
Pastikan untuk menggunakan program tar yang dikompilasi di bawah Solaris (bukan SunOS 4.x) untuk mengekstrak
file perl-5.xxtar.gz. Jangan gunakan tar GNU yang dikompilasi untuk SunOS4 di Solaris. (GNU tar
dikompilasi untuk Solaris akan baik-baik saja.) Ketika Anda menjalankan binari SunOS4 di Solaris, run-
sistem waktu secara ajaib mengubah nama path yang cocok dengan m#lib/locale# sehingga ketika tar mencoba
buat lib/locale.pm, sebuah file bernama lib/oldlocale.pm akan dibuat sebagai gantinya. Jika Anda menemukan
saran ini terlambat dan menggunakan tar yang dikompilasi SunOS4, Anda harus menemukan yang salah
ganti nama file dan pindahkan kembali ke lib/locale.pm.
Penyusun dan terkait Tools on Solaris.
Anda harus menggunakan kompiler ANSI C untuk membangun Perl. Perl dapat dikompilasi dengan Sun's
kompiler add-on C atau dengan gcc. Kompiler C yang dikirimkan dengan SunOS4 tidak akan berfungsi.
Memasukkan /usr/ccs/bin/ in Tujuan JALUR.
Beberapa alat yang diperlukan untuk membangun perl terletak di /usr/ccs/bin/: ar, as, ld, dan make.
Pastikan /usr/ccs/bin/ ada di PATH Anda.
Pada semua versi Solaris yang dirilis (8, 9 dan 10), Anda perlu memastikan hal berikut:
paket diinstal (info ini diambil dari FAQ Solaris):
untuk alat (sccs, lex, yacc, make, nm, truss, ld, as): SUNWbtool, SUNWsprot, SUNWtoo
untuk perpustakaan & header: SUNWhea, SUNWarc, SUNWlibm, SUNWlibms, SUNWdfbh, SUNWcg6h,
MATAHARIxwinc
Selain itu, pada Solaris 8 dan 9 Anda juga membutuhkan:
untuk pengembangan 64 bit: SUNWarcx, SUNWbtoox, SUNWdplx, SUNWscpux, SUNWsprox, SUNWtoox,
SUNWlmsx, SUNWlmx, SUNWlibCx
Dan hanya di Solaris 8 Anda juga membutuhkan:
untuk perpustakaan & tajuk: SUNWolinc
Jika Anda ragu paket mana yang berisi file yang Anda lewatkan, coba cari
instalasi yang memiliki file itu. Kemudian lakukan
$ grep /saya/hilang/file /var/sadm/install/contents
Ini akan menampilkan baris seperti ini:
/usr/include/sys/errno.hf none 0644 root bin 7471 37605 956241356 SUNWhea
Item terakhir yang terdaftar (SUNWhea dalam contoh ini) adalah paket yang Anda butuhkan.
Menghindari /usr/ucb/cc.
Anda tidak perlu memiliki /usr/ucb/ di PATH Anda untuk membangun Perl. Jika Anda ingin /usr/ucb/ masuk
PATH Anda, pastikan /usr/ucb/ TIDAK ada di PATH Anda sebelum direktori
berisi kompiler C yang tepat.
matahari C Penyusun
Jika Anda menggunakan compiler C Sun, pastikan direktori yang benar (biasanya /opt/SUNWspro/bin/)
ada di PATH Anda (sebelum /usr/ucb/).
GCC
Jika Anda menggunakan gcc, pastikan instalasi Anda baru dan selesai. versi perl sejak
5.6.0 dibangun dengan baik dengan gcc > 2.8.1 di Solaris >= 2.6.
Anda harus Mengkonfigurasi perl dengan
$ sh Konfigurasi -Dcc=gcc
Jika tidak, Anda mungkin mengalami kesalahan build yang aneh.
Jika Anda telah memperbarui versi Solaris, Anda mungkin juga harus memperbarui gcc Anda. Untuk
contoh, jika Anda menjalankan Solaris 2.6 dan gcc Anda diinstal di bawah / usr / local, periksa
di /usr/local/lib/gcc-lib dan pastikan Anda memiliki direktori yang sesuai,
sparc-sun-solaris2.6/ atau i386-pc-solaris2.6/. Jika direktori gcc untuk yang berbeda
versi Solaris daripada yang Anda jalankan, maka Anda perlu membangun kembali gcc untuk versi baru Anda
versi Solaris.
Anda bisa mendapatkan versi gcc yang telah dikompilasi darihttp://www.sunfreeware.com/> atau
<http://www.blastwave.org/>. Pastikan Anda mengambil paket untuk rilis Solaris Anda.
Jika Anda ingin menggunakan gcc untuk membuat modul tambahan untuk digunakan dengan perl yang dikirimkan bersama Solaris,
Anda harus menggunakan modul Solaris::PerlGcc yang tersedia dari CPAN. Perl dikirim
dengan Solaris dikonfigurasi dan dibangun dengan kompiler Sun, dan kompiler
informasi konfigurasi yang disimpan di Config.pm karena itu hanya relevan untuk Matahari
kompiler. Modul Solaris: PerlGcc berisi Config.pm pengganti yang benar
untuk gcc - lihat modul untuk detailnya.
GNU as dan GNU ld
Informasi berikut berlaku untuk gcc versi 2. Relawan untuk memperbaruinya sebagai
tepat untuk gcc versi 3 akan dihargai.
Versi as dan ld yang disertakan dengan Solaris berfungsi dengan baik untuk membuat perl. Ada
biasanya tidak perlu menginstal versi GNU untuk mengkompilasi Perl.
Jika Anda memutuskan untuk mengabaikan saran ini dan tetap menggunakan versi GNU, maka pastikan bahwa
mereka relatif baru. Versi yang lebih baru dari 2.7 tampaknya cukup baru. Lebih tua
versi mungkin mengalami masalah dengan pemuatan dinamis.
Jika Anda ingin menggunakan GNU ld, maka Anda harus memberikan flag -Wl,-E. NS
file petunjuk/solaris_2.sh mencoba melakukan ini secara otomatis dengan mengatur Konfigurasi berikut:
variabel:
ccdlflags="$ccdlflags -Wl,-E"
lddlflags="$lddlflags -Wl,-E -G"
Namun, selama bertahun-tahun, perubahan pada gcc, GNU ld, dan Solaris ld menyulitkan untuk
secara otomatis mendeteksi ld mana yang akhirnya dipanggil. Anda mungkin harus mengedit secara manual
config.sh dan tambahkan flag -Wl,-E sendiri, atau jalankan Configure secara interaktif dan tambahkan
bendera pada prompt yang sesuai.
Jika gcc Anda dikonfigurasi untuk menggunakan GNU as dan ld tetapi Anda ingin menggunakan yang Solaris
alih-alih membangun Perl, Anda harus menambahkan -B/usr/ccs/bin/ ke baris perintah gcc.
Salah satu cara mudah untuk melakukannya adalah dengan
$ sh Konfigurasi -Dcc='gcc -B/usr/ccs/bin/'
Perhatikan bahwa garis miring diperlukan. Ini akan menghasilkan beberapa peringatan yang tidak berbahaya seperti
Konfigurasi dijalankan:
gcc: awalan jalur file `/usr/ccs/bin/' tidak pernah digunakan
Pesan-pesan ini dapat diabaikan dengan aman. (Perhatikan bahwa untuk sistem SunOS4, Anda harus menggunakan
-B/bin/ sebagai gantinya.)
Atau, Anda dapat menggunakan variabel lingkungan GCC_EXEC_PREFIX untuk memastikan bahwa
as dan ld digunakan. Konsultasikan dokumentasi gcc Anda untuk informasi lebih lanjut tentang -B
opsi dan variabel GCC_EXEC_PREFIX.
matahari dan GNU membuat
Make di bawah /usr/ccs/bin berfungsi dengan baik untuk membangun Perl. Jika Anda memiliki Matahari C
compiler, Anda juga akan memiliki versi paralel dari make (dmake). Ini berfungsi dengan baik untuk
build Perl, tetapi terkadang dapat menyebabkan masalah saat menjalankan 'make test' karena
dependensi yang tidak ditentukan antara file harness uji yang berbeda. Masalah yang sama
juga dapat memengaruhi pembuatan beberapa modul tambahan, jadi dalam kasus tersebut tentukan '-m
serial' pada baris perintah dmake, atau gunakan /usr/ccs/bin/make sebagai gantinya. Jika Anda ingin menggunakan
GNU make, pastikan bit set-group-id tidak disetel. Jika ya, maka atur PATH Anda
sehingga /usr/ccs/bin/make sebelum GNU make atau menonaktifkan administrator sistem
bit set-group-id pada GNU make.
Menghindari libubb.
Solaris menyediakan beberapa fungsi kompatibilitas BSD di /usr/ucblib/libucb.a. Perl tidak akan
buat dan jalankan dengan benar jika ditautkan ke -lucb karena berisi rutinitas yang
tidak kompatibel dengan standar Solaris libc. Biasanya ini bukan masalah karena
file petunjuk solaris mencegah Configure bahkan mencari di /usr/ucblib untuk perpustakaan, dan
juga secara eksplisit menghilangkan -lucb.
Lingkungan Hidup untuk kompilasi perl on Solaris
PATH
Pastikan PATH Anda menyertakan compiler (/opt/SUNWspro/bin/ jika Anda menggunakan Sun's
compiler) serta /usr/ccs/bin/ untuk mengambil alat pengembangan lainnya (seperti make,
ar, sebagai, dan ld). Pastikan jalur Anda tidak menyertakan /usr/ucb atau menyertakan
itu setelah compiler dan alat compiler dan direktori Solaris standar lainnya. Anda
pasti tidak mau /usr/ucb/cc.
LD_LIBRARY_PATH
Jika Anda memiliki set variabel lingkungan LD_LIBRARY_PATH, pastikan itu TIDAK termasuk
/ lib atau /usr/lib. Jika Anda akan membuat ekstensi yang memanggil pihak ketiga yang dibagikan
perpustakaan (misalnya Berkeley DB) kemudian pastikan bahwa variabel lingkungan LD_LIBRARY_PATH Anda
menyertakan direktori dengan perpustakaan itu (mis / Usr / local / lib).
Jika Anda mendapatkan pesan kesalahan
dlopen: intersepsi rintisan gagal
itu mungkin karena variabel lingkungan LD_LIBRARY_PATH Anda menyertakan direktori
yang merupakan symlink ke / Usr / lib (Seperti / lib). Alasan ini menyebabkan masalah cukup
tak kentara. File libdl.so.1.0 sebenarnya *hanya* berisi fungsi yang menghasilkan 'rintisan'
intersepsi gagal' kesalahan! Linker runtime memotong link ke
"/usr/lib/libdl.so.1.0" dan tautan dalam implementasi internal dari fungsi-fungsi tersebut sebagai gantinya.
[Terima kasih kepada Tim Bunce untuk penjelasan ini.]
MENJALANKAN KONFIGURASI.
Lihat file INSTALL untuk informasi umum tentang Configure. Hanya khusus Solaris
masalah dibahas di sini. Biasanya, default harus baik-baik saja.
64-bit perl on Solaris.
Lihat file INSTALL untuk informasi umum mengenai kompilasi 64-bit. Secara umum,
default harus baik-baik saja bagi kebanyakan orang.
Secara default, Perl-5.6.0 (atau lebih baru) dikompilasi sebagai aplikasi 32-bit dengan file besar dan
dukungan jangka panjang.
Umum 32-bit vs 64-bit Masalah.
Solaris 7 dan di atasnya akan berjalan dalam mode 32 bit atau 64 bit pada CPU SPARC, melalui reboot.
Anda dapat membangun aplikasi 64 bit saat menjalankan mode 32 bit dan sebaliknya. Aplikasi 32 bit akan berjalan
di bawah Solaris berjalan dalam mode 32 atau 64 bit. Aplikasi 64 bit membutuhkan Solaris untuk menjadi
menjalankan mode 64 bit.
Aplikasi 32 bit yang ada dikenal sebagai LP32, yaitu Longs dan Pointer adalah 32 bit.
Aplikasi 64-bit lebih dikenal sebagai LP64. Fitur pembeda dari aplikasi LP64 bit
adalah kemampuannya untuk memanfaatkan ruang alamat 64-bit. Sangat mungkin untuk memiliki LP32
aplikasi bit yang mendukung bilangan bulat 64-bit (panjang panjang) dan file besar (> 2GB), dan ini adalah
default untuk Perl-5.6.0.
Untuk penjelasan lebih lengkap tentang masalah 64-bit, lihat "Solaris 64-bit Developer's
Panduan" dihttp://docs.sun.com/>
Anda dapat mendeteksi mode OS menggunakan "isainfo -v", mis
$ isainfo -v # Ultra 30 dalam mode 64 bit
Aplikasi sparcv64 9-bit
Aplikasi sparc 32-bit
Secara default, Perl akan dikompilasi sebagai aplikasi 32-bit. Kecuali jika Anda ingin mengalokasikan
lebih dari ~ 4GB memori di dalam perl, atau kecuali Anda membutuhkan lebih dari 255 file terbuka
deskriptor, Anda mungkin tidak memerlukan Perl untuk menjadi aplikasi 64-bit.
Besar File Bantuan
Untuk Solaris 2.6 dan seterusnya, ada dua cara berbeda untuk aplikasi 32-bit untuk
memanipulasi file besar (file yang ukurannya > 2GByte). (Aplikasi 64-bit
secara otomatis memiliki dukungan file besar bawaan secara default.)
Pertama adalah "lingkungan kompilasi transisional", yang dijelaskan dalam jikakompilasi64(5).
Menurut halaman manual,
Lingkungan kompilasi transisi mengekspor semua
fungsi 64-bit eksplisit (xxx64()) dan jenis selain
semua fungsi reguler (xxx()) dan tipe. Baik xxx() dan
xxx64() fungsi tersedia untuk sumber program. A
Aplikasi 32-bit harus menggunakan fungsi xxx64() secara berurutan
untuk mengakses file besar. Lihat Jika64(5) halaman manual untuk a
daftar lengkap antarmuka transisi 64-bit.
Lingkungan kompilasi transisi diperoleh dengan kompiler berikut dan
bendera penghubung:
getconf LFS64_CFLAGS -D_LARGEFILE64_SOURCE
getconf LFS64_LDFLAG # tidak ada yang khusus diperlukan
getconf LFS64_LIBS # tidak ada yang khusus diperlukan
Kedua adalah "lingkungan kompilasi file besar", dijelaskan dalam jika kompilasi(5). Menurut
ke halaman manual,
Setiap antarmuka bernama xxx() yang perlu mengakses entitas 64-bit
untuk mengakses peta file besar ke panggilan xxx64() di
biner yang dihasilkan. Semua tipe data yang relevan didefinisikan sebagai
dengan ukuran yang benar (misalnya, off_t memiliki definisi typedef
untuk entitas 64-bit).
Aplikasi yang dikompilasi dalam lingkungan ini dapat menggunakan
antarmuka sumber xxx() untuk mengakses besar dan kecil
file, daripada harus secara eksplisit menggunakan transisi
xxx64() panggilan antarmuka untuk mengakses file besar.
Dua pengecualian adalah mencari() dan ftel(). Aplikasi 32-bit harus menggunakan fseeko(3C) dan
ftello(3C). Ini akan secara otomatis dipetakan ke fseeko64() dan ftello64().
Lingkungan kompilasi file besar diperoleh dengan
getconf LFS_CFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
getconf LFS_LDFLAGS # tidak ada yang khusus diperlukan
getconf LFS_LIBS # tidak ada yang khusus diperlukan
Secara default, Perl menggunakan lingkungan kompilasi file besar dan bergantung pada Solaris untuk melakukannya
pemetaan antarmuka yang mendasarinya.
Bangunan an LP64 perl
Untuk mengkompilasi aplikasi 64-bit pada UltraSparc dengan Sun Compiler terbaru, Anda perlu
gunakan tanda "-xarch=v9". dapatkanconf(1) akan memberi tahu Anda ini, mis
$getconf-a | grep v9
XBS5_LP64_OFF64_CFLAGS: -xarch=v9
XBS5_LP64_OFF64_LDFLAGS: -xarch=v9
XBS5_LP64_OFF64_LINTFLAGS: -xarch=v9
XBS5_LPBIG_OFFBIG_CFLAGS: -xarch=v9
XBS5_LPBIG_OFFBIG_LDFLAGS: -xarch=v9
XBS5_LPBIG_OFFBIG_LINTFLAGS: -xarch=v9
_XBS5_LP64_OFF64_CFLAGS: -xarch=v9
_XBS5_LP64_OFF64_LDFLAGS: -xarch=v9
_XBS5_LP64_OFF64_LINTFLAGS: -xarch=v9
_XBS5_LPBIG_OFFBIG_CFLAGS: -xarch=v9
_XBS5_LPBIG_OFFBIG_LDFLAGS: -xarch=v9
_XBS5_LPBIG_OFFBIG_LINTFLAGS: -xarch=v9
Bendera ini didukung di Sun WorkShop Compilers 5.0 dan seterusnya (sekarang dipasarkan di bawah
nama Forte) saat digunakan pada Solaris 7 atau lebih baru pada sistem UltraSparc.
Jika Anda menggunakan gcc, Anda harus menggunakan -mcpu=v9 -m64 sebagai gantinya. Opsi ini belum
didukung pada gcc 2.95.2; dari instal/KHUSUS dalam rilis itu:
GCC versi 2.95 tidak dapat mengkompilasi kode dengan benar untuk sparc64
target. Pengguna kernel Linux, setidaknya, dapat menggunakan sparc32
program untuk memulai pemanggilan shell baru dengan lingkungan yang
menyebabkan konfigurasi untuk mengenali (melalui uname -a) sistem sebagai sparc-*-*
sebagai gantinya.
Semua ini harus ditangani secara otomatis oleh file petunjuk, jika diminta.
Panjang Ganda.
Mulai 5.8.1, long double berfungsi jika Anda menggunakan kompiler Sun (diperlukan untuk tambahan
rutinitas matematika tidak termasuk dalam libm).
Thread in perl on Solaris.
Dimungkinkan untuk membangun versi perl berulir di Solaris. Seluruh utas perl
Namun, implementasinya masih eksperimental, jadi berhati-hatilah.
Mallok Isu dengan perl on Solaris.
Mulai dari perl 5.7.1 perl menggunakan Solaris malloc, karena perl malloc rusak ketika
berurusan dengan lebih dari 2GB memori, dan Solaris malloc juga tampaknya lebih cepat.
Jika Anda karena alasan tertentu (seperti kompatibilitas mundur biner) benar-benar perlu menggunakan Perl's
malloc, Anda dapat membangun kembali Perl dari sumber dan Mengonfigurasi build dengan
$ sh Konfigurasi -Dusemymalloc
Anda tidak boleh menggunakan malloc Perl jika Anda membangun dengan gcc. Ada laporan inti
dump, terutama pada modul PDL. Masalahnya tampaknya hilang di bawah -DDEBUGGING, jadi
sudah sulit untuk dilacak. Kompiler Sun tampaknya baik-baik saja dengan atau tanpa
malloc perl. [XXX penyelidikan lebih lanjut diperlukan di sini.]
MEMBUAT MASALAH.
Masalah Pemuatan Dinamis Dengan GNU as dan GNU ld
Jika Anda memiliki masalah dengan pemuatan dinamis menggunakan gcc di SunOS atau Solaris, dan Anda
menggunakan GNU as dan GNU ld, lihat bagian "GNU as dan GNU ld" di atas.
ld.so.1: ./perl: fatal: kesalahan relokasi:
Jika Anda mendapatkan pesan ini di SunOS atau Solaris, dan Anda menggunakan gcc, mungkin itu adalah
Masalah GNU as atau GNU ld pada butir sebelumnya "GNU as dan GNU ld".
dlopen: intersepsi rintisan gagal
Penyebab utama dari pesan 'dlopen: stub interception failed' adalah bahwa
Variabel lingkungan LD_LIBRARY_PATH menyertakan direktori yang merupakan symlink ke
/ Usr / lib (Seperti / lib). Lihat "LD_LIBRARY_PATH" di atas.
#error "DATAMODEL_NATIVE tidak ditentukan"
Ini adalah kesalahan umum saat mencoba membangun Perl di Solaris 2.6 dengan gcc
instalasi dari Solaris 2.5 atau 2.5.1. File header Solaris berubah, jadi Anda perlu
untuk memperbarui instalasi gcc Anda. Anda dapat menjalankan kembali skrip fixincludes dari gcc
atau ambil kesempatan untuk memperbarui instalasi gcc Anda.
sh: ar: tidak ditemukan
Ini adalah pesan dari shell Anda yang memberi tahu Anda bahwa perintah 'ar' tidak ditemukan.
Anda perlu memeriksa variabel lingkungan PATH Anda untuk memastikan bahwa itu termasuk:
direktori dengan perintah 'ar'. Ini adalah masalah umum di Solaris, di mana 'ar' adalah
di direktori /usr/ccs/bin/.
MEMBUAT UJI
op/stat.t uji 4 in Solaris
op/stat.t tes 4 mungkin gagal jika Anda menggunakan semacam tmpfs. Membangun di / Tmp kadang-kadang
menunjukkan perilaku ini. Test suite mendeteksi jika Anda sedang membangun / Tmp, tapi mungkin tidak
dapat menangkap semua situasi tmpfs.
nss_hapus inti membuang dari op/pwen or op/hibah
Lihat "nss_delete core dump dari op/pwent atau op/grent" di perlhpux.
KOMPILASI LINTAS
Tidak ada yang terlalu tidak biasa di sini. Anda dapat dengan mudah melakukan ini jika Anda memiliki kompiler silang yang tersedia;
Permintaan Konfigurasi biasa saat menargetkan Solaris x86 terlihat seperti ini:
sh ./Konfigurasi -des -Dusecrosscompile \
-Dcc=i386-pc-solaris2.11-gcc \
-Dsysroot=$SYSROOT \
-Alddlflags=" -Wl,-z,nottext" \
-Dtargethost=... # Opsi kompilasi silang yang biasa
Penambahan lddlflags adalah satu-satunya bit abnormal.
PRABANGUN binari OF PERL UNTUK SOLAR.
Anda dapat mengambil binari bawaan untuk Solaris darihttp://www.sunfreeware.com/>,
<http://www.blastwave.org>, Status Aktifhttp://www.activestate.com/>, dan
<http://www.perl.com/> di bawah daftar Binari di bagian atas halaman. Mungkin ada
sumber lain juga. Harap dicatat bahwa situs-situs ini berada di bawah kendali mereka
pemilik masing-masing, bukan pengembang perl.
WAKTU JALAN MASALAH UNTUK PERL ON SOLAR.
Batas on Bilangan of Open File on Solaris.
tempat tinggal(3C) halaman manual mencatat bahwa untuk aplikasi LP32, hanya 255 file yang dapat dibuka menggunakan
buka(), dan hanya deskriptor file 0 hingga 255 yang dapat digunakan dalam aliran. Sejak perl
panggilan Buka() lalu fdopen(3C) dengan deskriptor file yang dihasilkan, Perl terbatas pada
255 file terbuka secara bersamaan, bahkan jika buka sistem() digunakan. Jika ini terbukti menjadi
masalah yang tidak dapat diatasi, Anda dapat mengkompilasi Perl sebagai aplikasi LP64, lihat "Membangun LP64
perl" untuk detailnya. Perhatikan juga bahwa batas sumber daya default untuk deskriptor file terbuka aktif
Solaris adalah 255, jadi Anda harus memodifikasi ulimit atau rctl Anda (Solaris 9 dan seterusnya)
tepat
SPESIFIKASI SOLARIS MODUL.
Lihat modul di bawah Solaris:: dan Sun::Solaris namespaces di CPAN, lihat
<http://www.cpan.org/modules/by-module/Solaris/> dan
<http://www.cpan.org/modules/by-module/Sun/>.
SPESIFIKASI SOLARIS MASALAH DENGAN MODUL.
Proc::ProsesTable on Solaris
Proc::ProcessTable tidak dikompilasi di Solaris dengan perl5.6.0 dan lebih tinggi jika Anda memiliki
LARGEFILES didefinisikan. Karena dukungan file besar adalah default di 5.6.0 dan yang lebih baru, Anda memiliki
untuk mengambil langkah-langkah khusus untuk menggunakan modul ini.
Masalahnya adalah bahwa berbagai struktur yang terlihat melalui procfs menggunakan off_t, dan jika Anda mengkompilasi
dengan dukungan file besar, perubahan ini dari 32 bit menjadi 64 bit. Jadi apa yang Anda dapatkan kembali dari
procfs tidak cocok dengan struktur di Perl, menghasilkan sampah. Lihat proc(4)
untuk diskusi lebih lanjut.
Perbaikan untuk Proc::ProcessTable adalah mengedit Makefile untuk menghapus flag file besar secara eksplisit
dari yang diambil MakeMaker dari Config.pm. Ini akan menghasilkan Proc::ProcessTable
sedang dibangun di bawah lingkungan yang benar. Semuanya akan baik-baik saja selama
Proc::ProcessTable tidak mencoba membagikan off_t dengan sisa Perl, atau jika memang demikian
harus secara eksplisit ditentukan sebagai off64_t.
BSD::Sumber daya on Solaris
BSD::Versi sumber daya lebih awal dari 1.09 tidak dikompilasi di Solaris dengan Perl 5.6.0 dan
lebih tinggi, untuk alasan yang sama seperti Proc::ProcessTable. BSD::Versi sumber daya mulai dari
1.09 memiliki solusi untuk masalah tersebut.
Bersih::SSLeay on Solaris
Net::SSLeay membutuhkan /dev/urandom untuk hadir. Perangkat ini tersedia dari Solaris 9
seterusnya. Untuk versi Solaris sebelumnya Anda bisa mendapatkan paket SUNWski (paket
dengan beberapa produk perangkat lunak Sun, misalnya Sun WebServer, yang merupakan bagian dari
Ekstensi Intranet Server Solaris, atau Layanan Direktori Sun, bagian dari Solaris untuk
ISP) atau unduh paket ANDIrand darihttp://www.cosy.sbg.ac.at/~andi/>. Jika Anda menggunakan
SUNWski, buat tautan simbolis /dev/urandom menunjuk ke /dev/random. Untuk lebih jelasnya, lihat
Dokumen ID27606 berjudul "Persyaratan dukungan yang berbeda /dev/random dalam Solaris[TM]
Lingkungan Operasi", tersedia dihttp://sunsolve.sun.com>.
Dimungkinkan untuk menggunakan Daemon Pengumpulan Entropi (ditulis dalam Perl!), Tersedia dari
<http://www.lothar.com/tech/crypto/>.
SunOS 4.x
Di SunOS 4.x Anda kemungkinan besar ingin menggunakan SunOS ld, /usr/bin/ld, karena semakin
versi terbaru dari GNU ld (seperti 2.13) tampaknya tidak berfungsi lagi untuk membangun Perl. Kapan
menautkan ekstensi, GNU ld menjadi sangat tidak senang dan memuntahkan banyak kesalahan seperti ini
... relokasi dipotong agar sesuai: BASE13 ...
dan mati. Oleh karena itu file petunjuk SunOS 4.1 secara eksplisit menetapkan ld menjadi /usr/bin/ld.
Pada Perl 5.8.1 pemuatan dinamis perpustakaan (DynaLoader, XSLoader) juga tampaknya
telah rusak di dalam SunOS 4.x. Oleh karena itu defaultnya adalah membangun Perl secara statis.
Menjalankan test suite di SunOS 4.1 agak sulit karena lib/Tie/File/t/09_gen_rs
test hang (subtest #51, FWIW) untuk beberapa alasan yang tidak diketahui. Hentikan saja tesnya dan bunuh itu
proses Perl tertentu.
Ada berbagai kegagalan lain, yang pada SunOS 4.1.4 dan gcc 3.2.2 sangat mirip dengan gcc
bug. Banyak kegagalan terjadi dalam tes Encode, di mana misalnya saat tes
mengharapkan "0" Anda mendapatkan "XNUMX" yang seharusnya setelah sedikit menyipitkan mata terlihat sangat aneh.
Contoh lain adalah sebelumnya di t/jalankan/fresh_perl dimana chr(0xff) diharapkan tetapi ujian
gagal karena hasilnya chr(0xff). Tepat.
Ini adalah hasil "make test" dari kombinasi tersebut:
Gagal 27 skrip pengujian dari 745, 96.38% oke.
Menjalankan "harness" itu menyakitkan karena banyak tes terkait Unicode yang gagal
menghasilkan megabyte pesan kegagalan, tetapi jika seseorang menunggu dengan sabar, seseorang akan mendapatkan hasil ini:
Gagal Uji Stat Wstat Total Gagal Daftar Gagal
-------------------------------------------------- ---------------------------
...
../ext/Encode/t/at-cn.t 4 1024 29 4 13.79% 14-17
../ext/Encode/t/at-tw.t 10 2560 17 10 58.82% 2 4 6 8 10 12
14-17
../ext/Encode/t/enc_data.t 29 7424 ?? ?? % ??
../ext/Encode/t/enc_eucjp.t 29 7424 ?? ?? % ??
../ext/Encode/t/enc_module.t 29 7424 ?? ?? % ??
../ext/Encode/t/encoding.t 29 7424 ?? ?? % ??
../ext/Encode/t/grow.t 12 3072 24 12 50.00% 2 4 6 8 10 12 14
16 18 20 22 24
Gagal Uji Stat Wstat Total Gagal Daftar Gagal
-------------------------------------------------- ----------------------------
../ext/Encode/t/guess.t 255 65280 29 40 137.93% 10-29
../ext/Encode/t/jperl.t 29 7424 15 30 200.00% 1-15
../ext/Encode/t/mime-header.t 2 512 10 2 20.00% 2-3
../ext/Encode/t/perlio.t 22 5632 38 22 57.89% 1-4 9-16 19-20
23-24 27-32
../ext/List/Util/t/shuffle.t 0 139 ?? ?? % ??
../ext/PerlIO/t/encoding.t 14 1 7.14% 11
../ext/PerlIO/t/fallback.t 9 2 22.22% 3 5
../ext/Socket/t/socketpair.t 0 2 45 70 155.56% 11-45
../lib/CPAN/t/vcmp.t 30 1 3.33% 25
../lib/Tie/File/t/09_gen_rs.t 0 15 ?? ?? % ??
../lib/Unicode/Collate/t/test.t 199 30 15.08% 7 26-27 71-75
81-88 95 101
103-104 106 108-
109 122 124 161
169-172
../lib/sort.t 0 139 119 26 21.85% 107-119
op/alarm.t 4 1 25.00% 4
op/utfhash.t 97 1 1.03% 31
run/fresh_perl.t 91 1 1.10% 32
uni/tr_7jis.t ?? ?? % ??
uni/tr_eucjp.t 29 7424 6 12 200.00% 1-6
uni/tr_sjis.t 29 7424 6 12 200.00% 1-6
56 tes dan 467 subtes dilewati.
Gagal 27/811 skrip pengujian, 96.67% oke. 1383/75399 subtes gagal, 98.17% oke.
alarm() kegagalan tes disebabkan oleh: sistem() ternyata memblokir alarm(). Itu adalah
mungkin bug libc, dan mengingat bahwa SunOS 4.x telah berakhir bertahun-tahun yang lalu, jangan tahan
napas Anda untuk memperbaikinya. Selain itu, jangan mencoba apa pun juga Unicode-y, terutama
dengan Encode, dan Anda akan baik-baik saja di SunOS 4.x.
Gunakan perlsolaris online menggunakan layanan onworks.net