myst
написал 30 марта 2006 года в 18:44 (1387 просмотров)
Ведет себя
как Череп; открыл 50 тем в форуме, оставил 2987 комментариев на сайте.
Народ, или я туплю или Соляра. Нифига не понмаю…
Есть два Makefile-а:
# This is makefile for the DBCL CC = gcc CFLAGS = -ggdb -fPIC -I./h -I$(MYSQL)/include OBJS = src/dbcl_lib.o all : $(OBJS) # Make static version of the library $(AR) rcs lib/libdbcl.a $(OBJS) # Make shared version of the library $(CC) $(CFLAGS) -shared -L$(MYSQL)/lib -lmysqlclient -o lib/libdbcl.so $(OBJS) src/dbcl_lib.o : src/dbcl_lib.c h/dbcl_lib.h clean : rm -f src/*.o cleanall : rm -f src/*.o rm -f lib/libdbcl.a lib/libdbcl.so
# This is makefile for the DBCL-TEST STATIC = # This is a comment # To use static linkage uncommet the following line #STATIC = -static CC = gcc CFLAGS = -ggdb -I./h -I$(MYSQL)/include OBJS = src/dbcl_test.o all : $(OBJS) $(CC) $(CFLAGS) $(STATIC) -L./lib -ldbcl -o bin/dbcltest $(OBJS) src/dbcl_test.o : src/dbcl_test.c h/dbcl_test.h clean : rm -f src/*.o cleanall : rm -f src/*.o rm -f bin/dbcltest
1-ый отрабатывает нормально — либы собираются, а вот когда собираю тестовую прогу 2-ым получаю вот это:
gcc -ggdb -I./h -I/opt/mysql-standard-5.0.15-solaris8-sparc/include -static -L./lib -ldbcl -o bin/dbcltest src/dbcl_test.o Undefined first referenced symbol in file dbcl_store_result src/dbcl_test.o dbcl_rollback src/dbcl_test.o dbcl_connect src/dbcl_test.o dbcl_query src/dbcl_test.o dbcl_last_error src/dbcl_test.o dbcl_disconnect src/dbcl_test.o dbcl_list_tables src/dbcl_test.o dbcl_commit src/dbcl_test.o dbcl_list_fields src/dbcl_test.o dbcl_select_db src/dbcl_test.o dbcl_list_dbs src/dbcl_test.o dbcl_init src/dbcl_test.o dbcl_ping src/dbcl_test.o dbcl_version src/dbcl_test.o ld: fatal: Symbol referencing errors. No output written to bin/dbcltest collect2: ld returned 1 exit status make: *** [all] Error 1
Само-собой все функции определены в библиотеке и имеют именно такие имена.
Что может быть неправильно?
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
А ты пробовал в ручную без мэйкфайла собрать?
нет, потому что через telnet на скорости хз какой маленькой делать это вручную = 2-3 часа. Это нереально.
это же вроже про shared lib? а ты static собираешь.
Я конешна не силен в ключах от gcc, но что-то странно…
Смотри внимательнее, я и шаред и статик.
Порядок аргументов. Линкер читает командную строку один раз, и разрешает ссылки из библиотеки только на символы, неопределенные на данный момент. Когда он видит libdbcl, ни одного неопределенного символа у него еще нет. Поставьте $(OBJS) полевее, и все будет хорошо.
Как-то сомнительно, но я попробую…
Гы-гы-гы. Тупил я — надо было добавить ещё -lmysqlclient -lnsl -lsocket -lm -lz в последнем Makefile. :)
вот по этому я и не люблю make