nixp.ru v3.0

20 января 2017,
пятница,
12:53:11 MSK

DevOps с компанией «Флант»
Аватар пользователя myst
myst написал 30 марта 2006 года в 18:44 (559 просмотров) Ведет себя как Череп; открыл 50 тем в форуме, оставил 2987 комментариев на сайте.

Народ, или я туплю или Соляра. Нифига не понмаю…

Есть два Makefile-а:

Makefile.dbcl

# 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

и Makefile.dbcltest

# 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

Само-собой все функции определены в библиотеке и имеют именно такие имена.

Что может быть неправильно?

Fatal

А ты пробовал в ручную без мэйкфайла собрать?

myst

нет, потому что через telnet на скорости хз какой маленькой делать это вручную = 2-3 часа. Это нереально.

decvar


-ldbcl

это же вроже про shared lib? а ты static собираешь.

Я конешна не силен в ключах от gcc, но что-то странно…

myst

Смотри внимательнее, я и шаред и статик.

vnp
myst
Народ, или я туплю или Соляра. Нифига не понмаю…

all : $(OBJS)
        $(CC) $(CFLAGS) $(STATIC) -L./lib -ldbcl -o bin/dbcltest $(OBJS)

Само-собой все функции определены в библиотеке и имеют именно такие имена.

Что может быть неправильно?

Порядок аргументов. Линкер читает командную строку один раз, и разрешает ссылки из библиотеки только на символы, неопределенные на данный момент. Когда он видит libdbcl, ни одного неопределенного символа у него еще нет. Поставьте $(OBJS) полевее, и все будет хорошо.

myst

Как-то сомнительно, но я попробую…

myst

Гы-гы-гы. Тупил я — надо было добавить ещё -lmysqlclient -lnsl -lsocket -lm -lz в последнем Makefile. :)

decvar

вот по этому я и не люблю make

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.