powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
14 сообщений из 14, страница 1 из 1
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
    #38253870
vladdv89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я написал следующую 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
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
    #38253873
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понял, что вы упаковали один jar внутрь другого?
Если - да, то можно поинтересоваться - зачем?
...
Рейтинг: 0 / 0
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
    #38253883
vladdv89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

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

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

Я знаю, что эта функция из библиотеки libpq, но вызывается она внутри функции Traverser.
...
Рейтинг: 0 / 0
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
    #38253973
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladdv89Я знаю, что эта функция из библиотеки libpq, но вызывается она внутри функции Traverser."Чтобы продать что-нибудь ненужное, надо купить что-нибудь ненужное. А у нас денег нет".
Загрузчик в курсе, где ему искать libpq?
...
Рейтинг: 0 / 0
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
    #38253991
vladdv89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
    #38253992
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы указали "всё, что надо" для компиляции. А требуется, чтобы сторонний so-шник был доступен для вашего приложения.
И сдаётся мне, что к java ваша проблема никак не относится.
...
Рейтинг: 0 / 0
Ld.so.1: java: fatal: relocation error: symbol PQconnectdb: referenced symbol not found
    #38254002
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladdv89,

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

vladdv89,

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

vladdv89,

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



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


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