У меня есть C-файл, который включает в себя заголовок, который сам включает в себя "jni.h".В настоящее время я компилирую файл с помощью команды:
gcc hdfs_test.c -I/HDFS_HOME/hdfs/src/c++/libhdfs -I/usr/lib/jvm/default-java/include -L/HDFS_HOME/hdfs/src/c++/libhdfs -L/HDFS_HOME/build/c++/Linux-i386-32/lib -L/usr/lib/jvm/default-java/jre/lib/i386/server -ljvm -lhdfs -o hdfs_test
для запуска результирующего файла .o, переменных среды для CLASSPATH и JAVAHOME.
Теперь я хочу использовать этот файлв существующем C-проекте, где они используют make-файлы.Проект Postgresql.В этом проекте используются Makefiles.Я хочу добавить необходимые инструкции в make-файл в папке, куда я добавляю файл, чтобы я мог запустить его вместе с проектом.
Текущий make-файл имеет следующее:
subdir = src/backend/storage/smgr
top_builddir = ../../../..
include $(top_builddir)/src/Makefile.global
OBJS = md.o smgr.o smgrtype.o
include $(top_srcdir)/src/backend/common.mk
Что мне добавить в make-файл, чтобы скомпилировать мой c-файл с проектом?
Спасибо
*Edit 1 *
Я, вероятно, должен был заявить, что я пытался сделать.До сих пор я добавил несколько исходных файлов в модуль postgres SMGR (исходный каталог).Все они работали нормально, просто добавив fileName.o в список файлов OBJS.Например, если бы я добавил Ac, я бы добавил Ao в список OBJS, и файл будет скомпилирован и добавлен в проект.
Теперь новый файл, который я пытаюсь добавить, это hdfs_test.c, этоотличается от других исходных файлов, которые я добавил ранее.Разница в том, что он не компилируется с помощью простой команды gcc, но нуждается в команде, которую я показал выше.Я попытался вручную сгенерировать файл .o, добавив его в свой Makefile:
OBJS = md.o smgr.o smgrtype.o hdfs_FD.o hdfsManager.o smgrWrapper.o hdfs_test.o
include $(top_srcdir)/src/backend/common.mk
hdfs_test.o : hdfs_test.c
gcc hdfs_test.c -I/HDFS_HOME/hdfs/src/c++/libhdfs -I/usr/lib/jvm/default-java/include -L/HDFS_HOME/hdfs/src/c++/libhdfs -L/HDFS_HOME/build/c++/Linux-i386-32/lib -L/usr/lib/jvm/default-java/jre/lib/i386/server -ljvm -lhdfs -o hdfs_test
Когда Make, я получаю следующую ошибку:
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 0 has invalid symbol index 12
/ usr / bin/ ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): перемещение 1 имеет недопустимый индекс символа 13 / usr / bin / ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): перемещение 2 имеет недопустимый индекс символа 2 / usr / bin / ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): перемещение 3 имеет недопустимый индекс символа 2 / usr / bin /ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): перемещение 4 имеет недопустимый индекс символа 12 / usr / bin / ld: /usr/lib/debug/usr/lib/crt1.o (.debug_info): перемещение 5 имеет недопустимый индекс символа 14 / usr / bin / ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): перемещение 6 имеет недопустимый индекс символа 14 / usr / bin / ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): перемещение 7 имеет недопустимый индекс символа 14 / usr / bin / ld: /usr/lib/debug/usr/lib/crt1.o (.debug_info): перемещение 8 имеет недопустимый индекс символа 2 / usr / bin / ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info):перемещение 9 имеет недопустимый индекс символа 2 / usr / bin / ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): перемещение 10 имеет недопустимый индекс символа 13 / usr / bin / ld: / usr /lib / debug / usr / lib / crt1.o (.debug_info): перемещение 11 имеет недопустимый индекс символа 14 / usr / bin / ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): перемещение12 имеет недопустимый индекс символа 14 / usr / bin / ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): перемещение 13 имеет недопустимый индекс символа 14 / usr / bin / ld: / usr / lib/debug/usr/lib/crt1.o(.debug_info): перемещение 14 имеет недопустимый индекс символа 14 / usr / bin / ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): перемещение 15имеет недопустимый индекс символа 14 / usr / bin / ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): перемещение 16 имеет недопустимый индекс символа 14 / usr / bin / ld: / usr / lib /debug / usr / lib / crt1.o (.debug_info): перемещение 17 имеет недопустимый индекс символа 14 / usr / bin / ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): перемещение 18 имеетнедопустимый индекс символа 14 / usr / bin / ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): перемещение19 имеет недопустимый индекс символа 14 / usr / bin / ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): перемещение 20 имеет недопустимый индекс символа 14 / usr / bin / ld: / usr / lib/debug/usr/lib/crt1.o(.debug_info): перемещение 21 имеет недопустимый индекс символа 14 / usr / bin / ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): перемещение 22имеет недопустимый индекс символа 22 /usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/crt1.o: в функции _start':
(.text+0x18): undefined reference to
main 'collect2: ldвозвращено 1 состояние выхода make: * [tati.o] Ошибка 1
Надеюсь, это прояснит ситуацию.