请教唐先生和各位大虾--6.2下的程序如何在6.3下链接

小弟我有一个基于ACE+TAO的应用程序,比较大.在宿主机qnx6.2.0评测版环境下编译及链接正常,因评测版6.2.0没有mkifs命令,故近日在宿主机qnx6.3.0商业版下编译链接.现出现了一些问题.不知如何解决,特向唐先生和各位大虾讨教.

我在编译时,使用make >make.txt将编译时产生的信息存储在make.txt文件中,我对比了一下在6.2.0和6.3.0下的make.txt文件,是一模一样的.在6.3.0下编译时一直很正常,直到最后需要执行链接ld时,报出了一个错误,如下:
/usr/local/SEC/OCP_B2.1/OCP/Infrastructure/PlatformServices/ACE_Wrappers/ace/liborbsvcs.so: undefined reference to ‘ACE_Locked_Free_List<ACE_Cached_Mem_Pool_Node<char [183]>, ACE_Thread_Mutex>::ACE_Locked_Free_List
(int, unsigned int, unsigned int, unsigned int, unsigned int)’

/usr/local/SEC/OCP_B2.1/OCP/Infrastructure/PlatformServices/ACE_Wrappers/ace/liborbsvcs.so: undefined reference to `ACE_Locked_Free_List<ACE_Cached_Mem_Pool_Node<char [183]>, ACE_Thread_Mutex>::~ACE_Locked_Free_List(void)’

collect2: ld returned 1 exit status
make: *** [NameServiceQuery] Error 1
我在附件中附加了我的Makefile文件(因应用比较大,有多个Makefile文件,所以我仅上传了出错的那个)和make.txt(错误出现在最后一个g++命令行执行时).
谢谢大家!谢谢qnx.

make.txt

为何附件发不上去? make.txt的最后一行
g++ -W -Wall -Wno-non-template-friend -DQNX62 -D_POSIX_THREADS -D_POSIX_THREAD_SAFE_FUNCTIONS -D_REENTRANT -gstabs -I/usr/include/g+±3 -I/usr/include/g+±3/std -I /usr/lib/gcc-lib/ntox86/2.95.3/include/ -I/usr/ntox86/include/ -fno-implicit-templates -fno-exceptions -fcheck-new -D__ACE_INLINE__ -I/usr/local/SEC/OCP_B2.1/OCP/Infrastructure/PlatformServices/ACE_Wrappers -I/usr/local/SEC/OCP_B2.1/OCP/Globals -I/usr/local/SEC/OCP_B2.1/SEC_Specific/Substitutes -I/usr/local/SEC/OCP_B2.1/OCP -I/usr/local/SEC/OCP_B2.1/OCP/Infrastructure -I/usr/local/SEC/OCP_B2.1/OCP/Infrastructure/PlatformServices/ACE_Wrappers -I/usr/local/SEC/OCP_B2.1/OCP/Infrastructure/PlatformServices/ACE_Wrappers/TAO -I/usr/local/SEC/OCP_B2.1/OCP/Infrastructure/PlatformServices/ACE_Wrappers/TAO/orbsvcs -I/usr/local/SEC/OCP_B2.1/OCP/Configurator -I/usr/local/SEC/OCP_B2.1/SEC_Specific/Configurator -DINFRA_HAS_DISTRIBUTION -DINFRA_HAS_TAO_ORB -DINFRA_LACKS_CSS -L/usr/local/SEC/OCP_B2.1/OCP/Infrastructure/PlatformServices/ACE_Wrappers/ace -L./ -L/usr/local/SEC/OCP_B2.1/OCP/Infrastructure/PlatformServices/ACE_Wrappers/TAO/orbsvcs/orbsvcs -L/usr/local/SEC/OCP_B2.1/OCP/Infrastructure/PlatformServices/ACE_Wrappers/TAO/tao -L/usr/local/SEC/OCP_B2.1/OCP/Infrastructure/PlatformServices/ACE_Wrappers/ace -o NameServiceQuery .obj/NSQueryMain.o /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/SystemConfigurator.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/InfrastructureEssentials.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/rtarm_static.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/rtarm_idl.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/rtarm_anytime.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/TransitionService.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/TransitionIDL.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/ErrorService.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/NameService.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/OSS_Service.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/PersistenceService.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/FrameController.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/TimerService.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/TimeService.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/ConfigurationUtilities.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/EventServiceUtilities.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/NVMMService.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/ConcurrencyUtilities.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/ObjectStateUtilities.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/ORB_Utilities.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/PersistenceUtilities.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/ReplicationUtilities.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/TimeServiceUtilities.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/TimeSynchronization.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/InfrastructureUtilities.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/Infrastructure.so /usr/local/SEC/OCP_B2.1/OCP/Infrastructure/PlatformServices/ACE_Wrappers/ace/liborbsvcs.so /usr/local/SEC/OCP_B2.1/OCP/Infrastructure/PlatformServices/ACE_Wrappers/ace/libTAO.so /usr/local/SEC/OCP_B2.1/OCP/Infrastructure/PlatformServices/ACE_Wrappers/ace/libACE.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/SystemConfigurator.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/InfrastructureEssentials.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/rtarm_static.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/rtarm_idl.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/rtarm_anytime.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/TransitionService.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/TransitionIDL.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/ErrorService.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/NameService.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/OSS_Service.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/PersistenceService.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/FrameController.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/TimerService.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/TimeService.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/ConfigurationUtilities.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/EventServiceUtilities.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/NVMMService.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/ConcurrencyUtilities.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/ObjectStateUtilities.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/ORB_Utilities.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/PersistenceUtilities.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/ReplicationUtilities.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/TimeServiceUtilities.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/TimeSynchronization.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/InfrastructureUtilities.so /usr/local/SEC/OCP_B2.1/OCP/_Libfiles/Infrastructure.so -lorbsvcs -lTAO -lACE
make[1]: Leaving directory `/usr/local/SEC/OCP_B2.1/OCP/Infrastructure/InfrastructureUtilities/NameServiceUtilities’

用6.20编译时,最后一行的命令行输出一样吗?

使用6.20和6.30时的输出是一模一样的。我把ACE自带的用于支持不同版本qnx的一个用于设置各种编译选项的文件写在下面,请唐先生和各位大虾帮忙.
文件1: platform_qnx_rtp6.1.GNU

QNX/RTP hosted, using custom built gcc2.96

ACE_HAS_GNUG_PRE_2_8 := 0

enable if using Cross-compiler

#CROSS-COMPILE=1
inline = 1
debug = 1
optimize = 0

static_libs_only=1

ifeq ($(exceptions),1)
CCFLAGS += -fexceptions
LDFLAGS += -fexceptions
else
CCLAGS += -fno-exceptions
LDLAGS += -fno-exceptions
endif # ! exceptions

CC = gcc
CXX = g++
DCFLAGS += -gstabs

CFLAGS += -W -Wall -Wno-non-template-friend -DQNX61 -D_POSIX_THREADS -D_POSIX_THREAD_SAFE_FUNCTIONS -D_REENTRANT
CCFLAGS += $(CFLAGS) -fno-implicit-templates

DLD = $(CXX)
LD = $(CXX)
LIBS += -lsocket -lstdc++ -lm
OCFLAGS += -O3
PIC = -fPIC
AR = ar
ARFLAGS = ruv
#RANLIB = ranlib
SOFLAGS = $(CPPFLAGS) -shared
SOBUILD = $(COMPILE.cc) $(PIC) -o $(VSHDIR)$*.so $<
PRELIB = @true

文件2: platform_qnx_rtp6.2.GNU

QNX/RTP hosted, using custom built gcc2.96

ACE_HAS_GNUG_PRE_2_8 := 0

enable if using Cross-compiler

#CROSS-COMPILE=1

inline = 1
debug = 1
optimize = 0

#static_libs_only=1

ifeq ($(exceptions),1)
CCFLAGS += -fexceptions
LDFLAGS += -fexceptions
else
CCLAGS += -fno-exceptions
LDLAGS += -fno-exceptions
endif # ! exceptions

CC = gcc
CXX = g++
DCFLAGS += -gstabs

CFLAGS += -W -Wall -Wno-non-template-friend -DQNX62 -D_POSIX_THREADS -D_POSIX_THREAD_SAFE_FUNCTIONS -D_REENTRANT
CCFLAGS += $(CFLAGS) -I/usr/include/g+±3 -I/usr/include/g+±3/std -I /usr/lib/gcc-lib/ntox86/2.95.3/include/ -I/usr/ntox86/include/ -fno-implicit-templates

DLD = $(CXX)
LD = $(CXX)
LIBS += -lsocket -lstdc++ -lm
OCFLAGS += -O3
PIC = -fPIC
AR = ar
ARFLAGS = ruv
#RANLIB = ranlib
SOFLAGS = $(CPPFLAGS) -shared
SOBUILD = $(COMPILE.cc) $(PIC) -o $(VSHDIR)$*.so $<
PRELIB = @true

不能那么简单的把 -DQNX61 必成 -DQNX62 吧。说不定你缺的那个函数就在 #ifdef QNX61 里面呢。

redrain168后来把这句话ACE目录下INLUCDE目录中关于往QNX62移植的。GNU文件中CCFLAGS += $(CFLAGS) -I/usr/include/g+±3 -I/usr/include/g+±3/std -I /usr/lib/gcc-lib/ntox86/2.95.3/include/ -I/usr/ntox86/include/ -fno-implicit-templates
中 -fno-implicit-templates 屏蔽掉,问题就解决了。解决方法来自于ace文档中ACE_INSTALL文档。