2013-10-09 2 views
1

Теперь я создаю динамическую библиотеку и программу для иллюстрации командной строки, которая использует эту динамическую библиотеку. Библиотека и программа иллюстрации находится в той же папке:Загрузка динамической ошибки пути библиотеки в mac

/user/xxx/develop/debug/libdynamic.dylib 
/user/xxx/develop/debug/illustration 

Когда программа иллюстрации может работать очень хорошо в моем компьютере, я посылаю программу иллюстрации, а также динамическую библиотека моего коллеги, и он будет работать иллюстрационная программа в его компьютере. Тем не менее, каждый раз, когда он запускает программу иллюстраций в окне команд, программа также напоминает, что она не может загрузить libdynamic.dylib, поскольку она пытается найти библиотеку в /user/xxx/develop/debug/, которая недоступна на компьютере моего коллеги. Мне было интересно, что я должен делать. Большое спасибо.

EDIT: Выход с помощью otool для программы иллюстрации выглядит следующим образом:

/Users/xxx/develop/debug/libdynamic.dylib (compatibility version 0.0.0, current version 0.0.0) 

    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 744.18.0) 

    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0) 
+0

Извините, вам нужно «otool -L/user/xxx/develop/debug/illustration», чтобы увидеть, где он думает о жизни 'dylib'. – trojanfoe

ответ

1

Вы должны сказать illustration где найти libdynamic.dylib, которые вы можете сделать после сборки с использованием install_name_tool (manpage). Вы хотите, чтобы установить новый путь к @executable_path/libdynamic.dylib, с (что-то вроде):

$ install_name_tool -change /user/xxx/develop/debug/libdynamic.dylib \ 
    @executable_path/libdynamic.dylib \ 
    /user/xxx/develop/debug/illustration 

(точного старого значением имени перейти к install_name_tool будет зависеть от того, что он в настоящее время установлен в положении, которое может быть определена используя otool -L /user/xxx/develop/debug/illustration).

Один из способов избежать этой глупости (и так, как я сам), чтобы использовать опцию -install_name компоновщика:

$(BINDIR)/libdynamic.dylib: $(OBJS) 
    $(CXX) -dynamiclib -current_version $(MAJOR_MINOR_VERSION) \ 
     -compatibility_version $(MAJOR_MINOR_VERSION) \ 
     -install_name @executable_path/libdynamic.dylib \ 
     $(LDFLAGS) -o [email protected] $(OBJS) $(LIBS) 

(Makefile фрагмент, взятый из here).

Смежные вопросы