mjordan
25-08-2003, 23:11
Non, non devo scatenare alcuna guerra. Ho solo questo problema:
Fatto il seguente stupido programma Java:
import java.awt.event.*;
import javax.swing.*;
class CloseableFrame extends JFrame {
public CloseableFrame()
{
setTitle("Lanciato da C");
setSize(320, 200);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
public class myFrame {
public static void main(String[] args)
{
JFrame frame = new CloseableFrame();
frame.show();
}
}
e adeguatamente compilato, volevo provare ad avviare la JVM come un normale processo, con il seguente programma C:
/* -*-linux-c-*- */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
/* Variabili globali. */
extern int errno;
pid_t pid;
/*
** Duplicazione dello spazio di indirizzi.
*/
void
spawn_process(const char * progname,
const char * args)
{
extern char ** environ;
pid = fork();
if (pid == 0) { // Processo child.
execle(progname, args, environ);
_exit(EXIT_FAILURE);
}
return;
} // spawn_process()
int
main(int argc, char ** argv)
{
int status = 0;
const char * progname = "/usr/share/j2sdk1.4.2/bin/java";
const char * args = "myFrame";
spawn_process(progname, args);
status = wait(&pid);
/*
** Controllo del segnale di uscita.
*/
if (WIFSIGNALED(status))
fprintf(stderr, "%d: Terminato dal segnale %d: %s\n",
(int)pid, WTERMSIG(status), strerror(errno));
return 0;
}
Quello che ottengo è un misero messaggio della JVM di impossibilità nel trovare libjava.so
Allora ho fatto una prova (non convinto, visto che ho già passato l'environment), settando il path della libreria prima in /etc/ld.so.conf e poi esportando la variabile LD_LIBRARY_PATH.
Risultato? Uguale a prima. Cosa potrebbe essere? Non mi è mai capitata una situazione del genere...
Fatto il seguente stupido programma Java:
import java.awt.event.*;
import javax.swing.*;
class CloseableFrame extends JFrame {
public CloseableFrame()
{
setTitle("Lanciato da C");
setSize(320, 200);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
public class myFrame {
public static void main(String[] args)
{
JFrame frame = new CloseableFrame();
frame.show();
}
}
e adeguatamente compilato, volevo provare ad avviare la JVM come un normale processo, con il seguente programma C:
/* -*-linux-c-*- */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
/* Variabili globali. */
extern int errno;
pid_t pid;
/*
** Duplicazione dello spazio di indirizzi.
*/
void
spawn_process(const char * progname,
const char * args)
{
extern char ** environ;
pid = fork();
if (pid == 0) { // Processo child.
execle(progname, args, environ);
_exit(EXIT_FAILURE);
}
return;
} // spawn_process()
int
main(int argc, char ** argv)
{
int status = 0;
const char * progname = "/usr/share/j2sdk1.4.2/bin/java";
const char * args = "myFrame";
spawn_process(progname, args);
status = wait(&pid);
/*
** Controllo del segnale di uscita.
*/
if (WIFSIGNALED(status))
fprintf(stderr, "%d: Terminato dal segnale %d: %s\n",
(int)pid, WTERMSIG(status), strerror(errno));
return 0;
}
Quello che ottengo è un misero messaggio della JVM di impossibilità nel trovare libjava.so
Allora ho fatto una prova (non convinto, visto che ho già passato l'environment), settando il path della libreria prima in /etc/ld.so.conf e poi esportando la variabile LD_LIBRARY_PATH.
Risultato? Uguale a prima. Cosa potrebbe essere? Non mi è mai capitata una situazione del genere...