Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found / 14 сообщений из 14, страница 1 из 1
11.05.2013, 20:07:47
    #38253870
vladdv89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
Я написал следующую java программу

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
	import java.io.*;
	import java.util.*;
	import java.sql.Connection;
	import java.sql.DriverManager;
	import java.sql.ResultSet;
	import java.sql.SQLException;
	import java.sql.Statement;
	import java.util.logging.Level;
	import java.util.*;

	public class Sample {
			public native long Traveser(String Path);

			public native void Configure(String Path);
		public static void main (String[] args) throws IOException  {
				long count=0;		
				int CountComputers;
				FileInputStream fstream = new FileInputStream(
						"/export/hadoop-1.0.1/bin/countcomputers.txt");
				DataInputStream input = new DataInputStream(fstream);
				BufferedReader br = new BufferedReader(new InputStreamReader(input));
				String result=br.readLine();
				CountComputers=Integer.parseInt(result);
				input.close();
				fstream.close();
				Connection con = null;
				Statement st = null;
					ResultSet rs = null;    
				   String url = "jdbc:postgresql://192.168.1.8:5432/NexentaSearch";
					String user = "postgres";
					String password = "valter89";
				ArrayList<String> paths = new ArrayList<String>();
				try
				{
					con = DriverManager.getConnection(url, user, password);
							st = con.createStatement();
							rs = st.executeQuery("select path from tasks order by id");
					while (rs.next()) { paths.add(rs.getString(1)); };
					PrintWriter zzz = null;
						try
						{
								zzz = new PrintWriter(new FileOutputStream("/export/hadoop-1.0.1/bin/readwaysfromdatabase.txt"));
						}
						catch(FileNotFoundException e)
						{
								System.out.println("Error");
								System.exit(0);
						}
						for (int i=0; i<paths.size(); i++)
					{
						zzz.println("paths[i]=" + paths.get(i) + "\n");
						}
						zzz.close();
					
				}
				catch (SQLException e) 
				{
					System.out.println("Connection Failed! Check output console");
					e.printStackTrace();
				}
						Sample inst=new Sample();
					for (int i=0; i<paths.size(); i++)
					{
						inst.Configure("/etc/nsindexer.conf");
						count = inst.Traveser(paths.get(i));
						}
			}
			static {
				System.loadLibrary("nativetestlib");
			}
	}


Откомпилировал ее и создал jar файл

Код: java
1.
2.
    ./javac -classpath /folder/postgresql-8.4-703.jdbc3.jar -d /Samplejavaprogram/classes /Samplejavaprogram/src/Sample.java
    ./jar -cvf /Samplejavaprogram/Sample.jar /folder/postgresql-8.4-703.jdbc3.jar -C /Samplejavaprogram/classes/ .


Добавил в файл манифеста внутри jar-а следующие строки

Код: java
1.
2.
    Main-Class: Sample
    Class-Path: /folder/postgresql-8.4-703.jdbc3.jar


Затем собрал библиотеку libnativetestlib.so c помощью команды

root@one: /usr/gcc/4.4/bin# ./gcc avl_tree.c buf_read.c db_prep.c file_process.c global_header.c traverser.c -o libnativetestlib.so -shared -fPIC -I/opt/jdk1.7.0_06/include -I/opt/jdk1.7.0_06/include/solaris -I/usr/gcc/4.4/bin/include -L/usr/gcc/4.4/bin/lib
При этом отмечу, что в папке /usr/gcc/4.4/bin/lib был файл libpq.so, который используется, так как в функциях Traverser и Configure происходит подключение postgresql базе данных. При попытке запуска созданной программы с помощью команды

Код: java
1.
    ./java -Djava.library.path=/opt/jdk1.7.0_06/lib -jar /Samplejavaprogram/Sample.jar


получил в результате сообщение

ld.so.1: java: fatal: relocation error: file /opt/jdk1.7.0_06/lib/libnativetestlib.so: symbol PQconnectdb: referenced symbol not found
В чем причина ошибки и как ее исправить?
...
Рейтинг: 0 / 0
11.05.2013, 20:16:30
    #38253873
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
Я правильно понял, что вы упаковали один jar внутрь другого?
Если - да, то можно поинтересоваться - зачем?
...
Рейтинг: 0 / 0
11.05.2013, 20:31:41
    #38253883
vladdv89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
Basil A. Sidorov,

Мне сказали так сделать, потому что также происходит подключение с помощью jdbc. Но в любом в случае это никак не связано с проблемой, так как ошибка происходит из-за библиотеки, связанной с native методами.
...
Рейтинг: 0 / 0
11.05.2013, 20:57:38
    #38253917
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
vladdv89Мне сказали так сделать, потому что также происходит подключение с помощью jdbc.Мало ли кто что сказал.
Упаковка jar внутрь другого jar - бессмысленна.Но в любом в случае это никак не связано с проблемой, так как ошибка происходит из-за библиотеки, связанной с native методами.... которая не видит символ?
А вы уже знаете где именно находится этот символ?
...
Рейтинг: 0 / 0
11.05.2013, 21:20:54
    #38253931
vladdv89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
Basil A. Sidorov,

внутри функции Traverser.
...
Рейтинг: 0 / 0
11.05.2013, 21:52:04
    #38253945
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
vladdv89внутри функции Traverser.А согласно доки - внутри libpq.
...
Рейтинг: 0 / 0
11.05.2013, 22:10:31
    #38253953
vladdv89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
Basil A. Sidorov,

Я знаю, что эта функция из библиотеки libpq, но вызывается она внутри функции Traverser.
...
Рейтинг: 0 / 0
11.05.2013, 22:36:40
    #38253973
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
vladdv89Я знаю, что эта функция из библиотеки libpq, но вызывается она внутри функции Traverser."Чтобы продать что-нибудь ненужное, надо купить что-нибудь ненужное. А у нас денег нет".
Загрузчик в курсе, где ему искать libpq?
...
Рейтинг: 0 / 0
11.05.2013, 22:50:58
    #38253991
vladdv89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
Basil A. Sidorov,

если вы про LD_LIBRARY_PATH, то я уже пробовал указывать (правда не заню как указать все, что надо) см. http://www.sql.ru/forum/1022168/ld-so-1-java-fatal-relocation-error-symbol-pqconnectdb-referenced-symbol-not-found .
...
Рейтинг: 0 / 0
11.05.2013, 22:57:40
    #38253992
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
Вы указали "всё, что надо" для компиляции. А требуется, чтобы сторонний so-шник был доступен для вашего приложения.
И сдаётся мне, что к java ваша проблема никак не относится.
...
Рейтинг: 0 / 0
11.05.2013, 23:17:39
    #38254002
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
vladdv89,

Воспользуйтесь функцией System.load() ( пример )
...
Рейтинг: 0 / 0
11.05.2013, 23:56:38
    #38254024
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
Basil A. Sidorovк java ваша проблема никак не относится +5

vladdv89,

Код: sql
1.
sudo apt-get install libpq-dev
...
Рейтинг: 0 / 0
12.05.2013, 10:47:12
    #38254133
vladdv89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
UsmanBasil A. Sidorovк java ваша проблема никак не относится +5

vladdv89,

Код: sql
1.
sudo apt-get install libpq-dev



а куда с помощью приведенной вами команды установится библиотека libpq, т. е. где потом искать файл libpq.so в операционной системе nexenta (solaris)?
...
Рейтинг: 0 / 0
12.05.2013, 12:40:40
    #38254188
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
vladdv89а куда с помощью приведенной вами команды установится библиотека libpqВ Ubuntu/Mint установилась в /usr/lib/
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]