Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / помогите с линковкой / 20 сообщений из 20, страница 1 из 1
21.07.2006, 19:21
    #33871354
bemtaill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
Привет всем.
Не могу разобраться почему не находит ссылки на методы классов. Короче по порядку:
1. проект собирается make файлом под линуксом. Также есть make.specific в котором я опрделяю пути к библиотекам + имена библиотек.
2. есть файлы (к примеру) c1.cpp и c1.h, в которых определен статический метод ALLNI::ALLNIScope::getALLNIScope(int).
3. из этих файлов я делаю стат библиотеку libc1.a
4. в make.specific проекта прописываю путь до этой библиотеки, и она её НАХОДИТ!
5. есть файл в с2.cpp в котором я вызываю метод ALLNI::ALLNIScope::getALLNIScope(int).

И на этапе линковки получаю: с2.cpp:36: undefined reference to ALLNI::ALLNIScope::getALLNIScope(int)

Библиотеку она видет т.к. ошибки о том что библ не найдена нет. В тоже время если я задаю в make.specific имя не существующей библиотеки она тут же ругается.
Выкладываю файлы make и make.specific. Может быть попожет.

make.specific
Код: plaintext
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.
#
#  FESA framework		June  2004 .
#

ALLNI_ROOT_PATH=../../../

# specific path for include files (-I/...)
SPECIFIC_CXXFLAGS = -I$(ALLNI_ROOT_PATH)ALLNIScope/v0/SERVER -I$(ALLNI_ROOT_PATH)ALLNIScope/v0/RT -I$(ALLNI_ROOT_PATH)ALLNIScope/v0/GENERATED_CODE \
		    -I$(ALLNI_ROOT_PATH)ALLNICommon/INCLUDE

# specific path for your libs (-L/...)
SPECIFIC_LDFLAGS = -L$(ALLNI_ROOT_PATH)ALLNIScope/COMMON \
					-L $(ALLNI_ROOT_PATH)ALLNIScope/v0/SERVER \
					-L $(ALLNI_ROOT_PATH)ALLNICommon/LIB \
					-L /nfs/slnfs1/vol1/u1/vlezhebo/fesa2/ALLNICommon/LIB \
					-L /user/vlezhebo/fesa2/ALLNICommon/LIB \
					-L /user/vlezhebo/fesa2/ALLNICommon/INCLUDE

					
# Extra Libs which are shared by the Server and the Realtime processes
SPECIFIC_LDLIBSCOMMON = -lALLNIChannel -lALLNIScope
# Extra Libs which are specific to the Server process
SPECIFIC_LDLIBSSERVER = -lALLNIChannel -lALLNIScope
# Extra Libs which are specific to the Realtime process
#SPECIFIC_LDLIBSRT = -lniScope_32
SPECIFIC_LDLIBSRT = -lALLNIChannel -lALLNIScope


make :
Код: plaintext
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.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
CPU=ppc4
ifndef FESA_VERSION
FESA_VERSION=CURRENT_RELEASE
endif

# FWK_VERSION_SYNC received as a parameter from the FesaSynchronize.pl, FesaCodeGen.pl, FesaSampleCodeGen.pl
FWK_VERSION_SYNC= 2 . 8 

# Include standard autorules
include /ps/src/dsc/co/Make.auto

# Include specific Makefile
include ./Make.specific

DEPLOY_DIR=	..

#
# JTC
#
JTC_HOME = /ps/local/$(CPU)
#JTC_LIBS = -L$(JTC_HOME)/lib -lJTC
#JTC_INCL = -I$(JTC_HOME)/include
JTC_LIBS = /ps/local/$(CPU)/lib/libJTC.a
JTC_INCL = -I/ps/local/$(CPU)/include

#
# ORBacus/E
#
OBE_HOME = /ps/local/$(CPU)
OBE_CLIENT_LIBS = -L$(OBE_HOME)/lib -lOBEClient
OBE_SERVER_LIBS = $(OBE_HOME)/lib/libOBEServer.a
OBE_INCL = -I$(OBE_HOME)/include -I$(OBE_HOME)/include/OBE
IDL2CPP  = $(OBE_HOME)/bin/eidl

#
# RDA
#
RDA_HOME = /ps/local/$(CPU)
#RDA_LIBS = -L$(RDA_HOME)/lib -lrda
#RDA_INCL = -I$(RDA_HOME) -I$(RDA_HOME)/rda
RDA_LIBS = /ps/local/$(CPU)/lib/librda.a
RDA_INCL = -I/ps/local/$(CPU) -I/ps/local/$(CPU)/rda


#
# PLC
#
PLC_LIBS = 
PLC_LDFLAGS = 

# Options for compiler and linker
CFLAGS =	-g -Wall -DFWK_VERSION_MACRO="\"$(FWK_VERSION_MACRO)\"" -I. -I../RT -I../SERVER -I../GENERATED_CODE -I../COMMON \
			-I.. -I../fesa -I/ps/local/$(CPU)/fesa/$(FESA_VERSION) -I/ps/local/$(CPU)/cmw/$(FESA_VERSION) -I/ps/local/$(CPU)/include $(JTC_INCL) $(RDA_INCL)
ifeq ($(CPU),ppc4)
CFLAGS += -mthreads
endif


LDFLAGS +=	-L.. -L../GENERATED_CODE -L../COMMON -L../RT -L../SERVER $(SPECIFIC_LDFLAGS) -L../fesaLib -L/ps/local/$(CPU)/fesa/$(FESA_VERSION) -L../fesaLib -L/ps/local/$(CPU)/cmw/$(FESA_VERSION) $(PLC_LDFLAGS) -L/user/fesa/ppc/sharedfesa \
			$(LOADLIBES) -L../../../ALLNICommon/LIB



#LDLIBS +=  -ldscrt -ltim -ltgv -ltgm -ldrvrutil -lerr -lerr_dummy $(XTRALIBS) -lbsd
# For the time being (till  2 . 7  is deployed) we links with a local version of ltim
# because of event payload transition between cytag nad user)
LDLIBS +=  -ldscrt /dsrc/co/lib/tim/libtim.$(CPU).a -ltgv -ltgm -ldrvrutil -lerr -lerr_dummy $(XTRALIBS) -lbsd

ifeq ($(CPU),L86)
LDLIBS += -lrt
else
LDLIBS += -mthreads
endif

LDLIBSCOMMON +=	-lALLNIChannelGeneratedPart.$(CPU)  -lALLNIChannelCommon.$(CPU) \
				-lFesaXMLParser -lFesaSorting -lFesaLogging -lFesaSync -lFesaDataStore $(PLC_LIBS) -lFesa \
				$(SPECIFIC_LDLIBSCOMMON)

ifeq ($(CPU),ppc4)
LDLIBSCOMMON += -lFesaLib.$(CPU)
endif

LDLIBSRT +=	-lALLNIChannelRT.$(CPU)  \
				-lFesaRT $(PLC_LIBS) -lFesaRecorder \
				$(RDA_LIBS) \
				$(SPECIFIC_LDLIBSRT)

LDLIBSSERVER +=	-lALLNIChannelServer.$(CPU) $(PLC_LIBS) \
				-lFesaPersistency -lFesaIntf -lcmwfesa -lFesaMW $(RDA_LIBS) $(OBE_SERVER_LIBS) $(JTC_LIBS)  \
				$(SPECIFIC_LDLIBSERVER)

CXXFLAGS +=	-Wno-deprecated $(CFLAGS) $(SPECIFIC_CXXFLAGS)

# Classes
CLSRCS =	deployALLNIChannel.cpp
CLSRCSH =
TSTSRCS =

# Test progs
TSTSRCS =

# All sources
CSRCS =
SRCS = 		$(CLSRCS) $(CLSRCSH) $(TSTSRCS) $(CSRCS)

# Deliverables
INSTFILES = 	$(LIB) $(HDRS)
TARGET =
LIB =
HDRS =	  	$(CLSRCS:.cpp=.h) $(CLSRCSH)

ifeq ($(FESA_VERSION),CURRENT_RELEASE)
	FWK_VERSION_MACRO=$(shell ls -l /ps/local/Linux/fesa/CURRENT_RELEASE | sed "s/^.*CURRENT_RELEASE -> //")
else
	ifeq ($(FESA_VERSION),NEXT_RELEASE)
		FWK_VERSION_MACRO=$(shell ls -l /ps/local/Linux/fesa/NEXT_RELEASE | sed "s/^.*NEXT_RELEASE -> //")
	else
		FWK_VERSION_MACRO=$(FESA_VERSION)
	endif
endif

#========================================================
vpath %.a .:../GENERATED_CODE:../RT:../SERVER:../COMMON
DEPENDLIBS = libALLNIChannelRT.$(CPU).a libALLNIChannelServer.$(CPU).a libALLNIChannelGeneratedPart.$(CPU).a libALLNIChannelCommon.$(CPU).a
all: checkVersion ALLNIChannel_M.$(CPU)
server: checkVersion ALLNIChannel_S.$(CPU)
rt: checkVersion ALLNIChannel_R.$(CPU)

ALLNIChannel_M.$(CPU).o: deployALLNIChannel.cpp
		$(COMPILE.cpp) -DEQP_RT -DEQP_SERVER $(CXXFLAGS) $< $(OUTPUT_OPTION)

ALLNIChannel_M.$(CPU): ALLNIChannel_M.$(CPU).o $(DEPENDLIBS)
		@-$(RM) $@ $(W)$@
		$(LINK.cc) -o $(W)$@ ALLNIChannel_M.$(CPU).o $(LDFLAGS) \
		$(LDLIBSSERVER) $(LDLIBSRT) $(LDLIBSCOMMON) $(LDLIBSRT) $(LDLIBSSERVER)  $(LDLIBSCOMMON) $(LDLIBSRT) $(LDLIBSSERVER) $(LDLIBS)

ALLNIChannel_R.$(CPU).o: deployALLNIChannel.cpp
		$(COMPILE.cpp) -DEQP_RT $(CXXFLAGS) $< $(OUTPUT_OPTION)

ALLNIChannel_R.$(CPU): ALLNIChannel_R.$(CPU).o $(DEPENDLIBS)
		@-$(RM) $@ $(W)$@
		$(LINK.cc) -o $(W)$@ ALLNIChannel_R.$(CPU).o \
		$(LDLIBSRT) $(LDLIBSCOMMON) $(LDLIBSRT) $(LDLIBSCOMMON) $(LDLIBSRT) $(LDLIBS)

ALLNIChannel_S.$(CPU).o: deployALLNIChannel.cpp
		$(COMPILE.cpp) -DEQP_SERVER $(CXXFLAGS) $< $(OUTPUT_OPTION)

ALLNIChannel_S.$(CPU): ALLNIChannel_S.$(CPU).o $(DEPENDLIBS)
		@-$(RM) $@ $(W)$@
		$(LINK.cc) -o $(W)$@ ALLNIChannel_S.$(CPU).o \
		$(LDLIBSSERVER) $(LDLIBSCOMMON)  $(LDLIBSSERVER) $(LDLIBSCOMMON) $(LDLIBSSERVER) $(LDLIBS)

clean:
		$(RM) *.o *.$(CPU) $(BAKS)

doc:
		doxygen dox.cfg

#additionnal rules
%.$(CPU): %.$(CPU).o
		$(LINK.cc) $^  $(LOADLIBES) $(LDLIBS) -o $@

%.$(CPU).o: %.cpp
		$(COMPILE.cpp) $(CXXFLAGS) $< $(OUTPUT_OPTION)

depend:
	makedepend -o .'$$(CPU)'.o -- -I. -I../GENERATED_CODE -I../COMMON -I../RT -I../SERVER $(SRCS) -- $^

checkVersion:
	@if [ $(FWK_VERSION_MACRO) != $(FWK_VERSION_SYNC) ]; then \
		echo "ERROR: Inconsistency between FESA version used for synchronization: $(FWK_VERSION_SYNC) and compilation: $(FWK_VERSION_MACRO)"; \
		exit  1 ; \
	fi

# DO NOT DELETE

Два дня уже мучаюсь. подскажите плиз.
...
Рейтинг: 0 / 0
24.07.2006, 09:56
    #33872913
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
Мэйк файлы не смотрел, долго разбираться, т.к. не указано, где происходит ошибка.

Посоветую 2 правила:
1. При линковке надежней будет сначала указывать объектники, а потом либы.
2. Либы надо перечеслять, начиная с "тяжелых". Т.е., если либа 1 юзает либу 2, то сначала надо добавлять либу 1, а потом 2. Иначе линковщик подумает, что 2-я либа, как бы и не нужна и забьет на нее. А когда опомниться, уже будет поздно.
...
Рейтинг: 0 / 0
24.07.2006, 10:57
    #33873077
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
Akh2. Либы надо перечеслять, начиная с "тяжелых". Т.е., если либа 1 юзает либу 2, то сначала надо добавлять либу 1, а потом 2. Иначе линковщик подумает, что 2-я либа, как бы и не нужна и забьет на нее. А когда опомниться, уже будет поздно.

Это ваши домыслы или опыт на конкретном линкере ???
...
Рейтинг: 0 / 0
24.07.2006, 11:05
    #33873100
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
Gluk (Kazan) Akh2. Либы надо перечеслять, начиная с "тяжелых". Т.е., если либа 1 юзает либу 2, то сначала надо добавлять либу 1, а потом 2. Иначе линковщик подумает, что 2-я либа, как бы и не нужна и забьет на нее. А когда опомниться, уже будет поздно.

Это ваши домыслы или опыт на конкретном линкере ???

Что вас смутило?
...
Рейтинг: 0 / 0
24.07.2006, 11:19
    #33873145
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
Отсутствие упоминания инструмента и его версии, в присутствии которого ваше заявление смахивает на правило от тумбочки
...
Рейтинг: 0 / 0
24.07.2006, 11:29
    #33873184
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
На опыте.

Данное правило, не помешает для всех линковщиков.
...
Рейтинг: 0 / 0
24.07.2006, 12:17
    #33873384
bemtaill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
Проверил - порядок подключекния в данном ничего не меняет. Похоже что она библиотеки находит а функции в них - нет. Т.к. если я вообще не указываю библиотеки, то ошибка та же самая. Хм.
Мои библиотеки libALLNIChannel.a и libALLNIScope.a . Конкретно функция ALLNI::ALLNIScope::getALLNIScope(int) содержиться в libALLNIScope.a.
Собирал я их (библиотеки) через "ar rc ..." и потом на всякий случай "ranlib ...".

Чё ж она не видит функции?
...
Рейтинг: 0 / 0
24.07.2006, 12:32
    #33873454
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
Может он берет откуда-нибудь старую версию библиотеки (может в других директориях валяется)?
Видит ли он вообще что-нибудь из нее?
...
Рейтинг: 0 / 0
24.07.2006, 12:49
    #33873522
Sandro_K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
Я не знаю в чем у тебя дело, но у меня был подобный глюк
если есть 2 библиотеки lib1.a и lib2.a, программа использует функции из обеих библиотек, и одна библиотека(lib1.a) использует функции из другой(lib2.a) то функции из (lib2.a) не видны в программе.

Чтобы это исправить надо указать в коммандной строке библиотеку lib2.a 2 раза: перед lib1.a и после lib1.a

-llib2 -llib1 llib2

Возможно у тебя эта же проблема
...
Рейтинг: 0 / 0
24.07.2006, 12:52
    #33873541
bemtaill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
да не. файл в единственном экземпляре. кроме того не вимдит ни одной функции из библ.
при компилировании пишет :
........
-lALLNIChannelServer.ppc4 -lFesaPersistency -lFesaIntf -lcmwfesa
-lFesaMW /ps/local/ppc4/lib/librda.a /ps/local/ppc4/lib/libOBEServer.a
/ps/local/ppc4/lib/libJTC.a -lALLNIChannelRT.ppc4 -lFesaRT
-lFesaRecorder /ps/local/ppc4/lib/librda.a -lALLNIScope -lALLNIChannel
-lALLNIChannelGeneratedPart.ppc4 -lALLNIChannelCommon.ppc4 -lFesaXMLParser
-lFesaSorting -lFesaLogging -lFesaSync -lFesaDataStore -lFesa -lALLNIScope
-lALLNIScope -lFesaLib.ppc4 -lALLNIChannelRT.ppc4 -lFesaRT
-lFesaRecorder /ps/local/ppc4/lib/librda.a -lALLNIScope -lALLNIChannel
-lALLNIChannelServer.ppc4 -lFesaPersistency -lFesaIntf -lcmwfesa
........
значит млин видит и при сборке учитывает!

При просмотре через F3 в mc вижу что есть такая функция.
...
Рейтинг: 0 / 0
24.07.2006, 12:53
    #33873547
Sandro_K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
и вообще если библиотеки используюут друг друга то надо внимательно просмотреть порядок их записи в коммандной строке
...
Рейтинг: 0 / 0
24.07.2006, 13:00
    #33873581
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
Sandro_KЯ не знаю в чем у тебя дело, но у меня был подобный глюк
если есть 2 библиотеки lib1.a и lib2.a, программа использует функции из обеих библиотек, и одна библиотека(lib1.a) использует функции из другой(lib2.a) то функции из (lib2.a) не видны в программе.

Чтобы это исправить надо указать в коммандной строке библиотеку lib2.a 2 раза: перед lib1.a и после lib1.a

-llib2 -llib1 llib2

Возможно у тебя эта же проблема

В принципе, в твоем случае достаточно было указать -llib1 -llib2.

При разборках с либой 1, линковщик запоминает, что не может связать. Потом ему дают вторую, где он находит нужные функции.
...
Рейтинг: 0 / 0
24.07.2006, 13:39
    #33873764
bemtaill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
http://www.sbor.net/linux-doc/lib/prog/gcc27/gcc1-2.html#ss2.9
авторЕсть различие в том, где в комадной строке вы записываете эту опцию; линкер ищет обрабатываемые библиотеки и объектные файлы в порядке, в котором они указаны. Таким образом, `foo.o -lz bar.o' ищет библиотеку `z' после файла `foo.o', но перед `bar.o'. Если `bar.o' ссылается на функции в `z', эти функции не могут быть загружены.

А не наоборот? Я думал если foo.o ссылается на z тогда ошибка...
...
Рейтинг: 0 / 0
24.07.2006, 13:42
    #33873777
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
Именно. Я про это уже сказал в самом начале.
...
Рейтинг: 0 / 0
24.07.2006, 13:44
    #33873785
bemtaill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
AkhИменно. Я про это уже сказал в самом начале.

сорри, гребу.
...
Рейтинг: 0 / 0
24.07.2006, 15:09
    #33874130
Sandro_K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
Akh Sandro_KЯ не знаю в чем у тебя дело, но у меня был подобный глюк
если есть 2 библиотеки lib1.a и lib2.a, программа использует функции из обеих библиотек, и одна библиотека(lib1.a) использует функции из другой(lib2.a) то функции из (lib2.a) не видны в программе.

Чтобы это исправить надо указать в коммандной строке библиотеку lib2.a 2 раза: перед lib1.a и после lib1.a

-llib2 -llib1 llib2

Возможно у тебя эта же проблема

В принципе, в твоем случае достаточно было указать -llib1 -llib2.

При разборках с либой 1, линковщик запоминает, что не может связать. Потом ему дают вторую, где он находит нужные функции.

Тут возможно я действительно неправильно написал, я точно не помню там библиотек было много и некоторые приходилось вписывать по 2 раза потому что иначе линкер не видел некоторые функции, в каком бы порядке библиотеки не были вписаны
...
Рейтинг: 0 / 0
24.07.2006, 15:18
    #33874151
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
Sandro_KТут возможно я действительно неправильно написал, я точно не помню там библиотек было много и некоторые приходилось вписывать по 2 раза потому что иначе линкер не видел некоторые функции, в каком бы порядке библиотеки не были вписаны

Вполне возможна такая ситуация. Если либы будут пользовать друг друга, например. :) Но я с такой ни разу сталкивался. По моему это изврат. ;)
...
Рейтинг: 0 / 0
24.07.2006, 15:39
    #33874239
Sandro_K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
Akh Sandro_KТут возможно я действительно неправильно написал, я точно не помню там библиотек было много и некоторые приходилось вписывать по 2 раза потому что иначе линкер не видел некоторые функции, в каком бы порядке библиотеки не были вписаны

Вполне возможна такая ситуация. Если либы будут пользовать друг друга, например. :) Но я с такой ни разу сталкивался. По моему это изврат. ;)

Я тоже считаю это извратом, но я помню что 2 дня возился с этим ничего понять не мог, пока знакомый мне не сказал чтоб я некоторые библиотеки включил 2 раза, после этого все откомпилилось, потом я еще долго пытался понять почему, толком так и не разобрался, но помоему если несколько библиотек используют функции из какой-то библиотеки то ее приходится вписывать 2 раза (возможно тут еще играет роль степень вложенности). Там было больше 20 библиотек с достаточно сложными зависимостями, но такого чтоб 2 библиотеки использовали друг друга там точно не было. Может кто-нибудь знает про это подробно?
...
Рейтинг: 0 / 0
24.07.2006, 16:28
    #33874443
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
Sandro_KЯ тоже считаю это извратом, но я помню что 2 дня возился с этим ничего понять не мог, пока знакомый мне не сказал чтоб я некоторые библиотеки включил 2 раза, после этого все откомпилилось, потом я еще долго пытался понять почему, толком так и не разобрался, но помоему если несколько библиотек используют функции из какой-то библиотеки то ее приходится вписывать 2 раза (возможно тут еще играет роль степень вложенности). Там было больше 20 библиотек с достаточно сложными зависимостями, но такого чтоб 2 библиотеки использовали друг друга там точно не было. Может кто-нибудь знает про это подробно?

Я считаю, что надо подключать библиотеку только тогда, когда закончаться файлы, которые ее юзают. По всей видимости, линкер, когда до нее доходит, он смотрит, есть ли в ней что-нибудь полезное. Забирает то что надо и забывает про нее.

Суть включения 2 раза: первый раз он забирает, то что надо из нее, второй раз он забирает из нее, новые ссылки, появившиеся после просмотра других файлов, появившися после просмотра первого включения библиотеки. Ну, и конечно первое включение - получение имен, которые требуются самой библиотеки из других.
...
Рейтинг: 0 / 0
24.07.2006, 16:51
    #33874541
bemtaill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с линковкой
мля, похоже разобрался. Уже начал спецификации построения библиотек читать, как тут осенило. Создовал библиотеки (по примеру) с помощью одного компилятора (gcc) а прогу компилил другим (g++).

Спасибо всем.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / помогите с линковкой / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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