Binding RelativeSource={ RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemType} } ...
атрибут по умолчанию
RelativeSource
Mode
свойство. Полный набор допустимых значений дан здесь ( от MSDN):
PreviousData Позволяет Вам связывать предыдущий элемент данных (не, которые управляют, который содержит элемент данных) в списке отображаемых элементов данных.
TemplatedParent Относится к элементу, к которому шаблон (в который элемент с привязкой к данным существует), применяется. Это подобно установке TemplateBindingExtension и только применимо, если Привязка в шаблоне.
Сам Относится к элементу, на котором Вы устанавливаете привязку, и позволяет Вам связывать одно свойство того элемента к другому свойству на том же элементе.
FindAncestor Относится к предку в родительской цепочке элемента с привязкой к данным. Можно использовать это для привязки с предком определенного типа или его подклассов. Это - режим, который Вы используете, если Вы хотите определить AncestorType и/или AncestorLevel.
Это будет работать:
# Generate position independent code (PIC)
gcc -fPIC -c -o xxx.o xxx.c
# Build a shared object and link with static libraries
ld -shared -static -o xxx.so xxx.o
# Same thing but with static libc
ld -shared -static -o xxx.so xxx.o -lc
Уточнение: флаг -static, если он задан gcc, передается компоновщику (ld) и указывает ему работать со статической версией (. a) библиотеки (указанной с флагом -l), а не динамической версии (.so).
Еще одна вещь: в моей системе (Debian) последний пример дает libc.a ... перекомпилируйте с ошибкой -fPIC . Совершенно уверен, что это означает, что libc.a, которая есть в моей системе, не была скомпилирована с -fPIC. apt-cache search libc pic все же дала некоторые результаты.
См. Также: Программная библиотека HOWTO , SO: объединение .so libs , ] ld (1) , gcc (1)
Если у вас есть какие-либо планы по переносимости вашей разделяемой библиотеки, используйте libtool (1)
. Он обработает большинство деталей флагов компилятора за вас и сделает вашу жизнь бесконечно проще. Если вы не используете libtool
, но позже решите, что хотите перенести свою программу на OS X или Windows, вам все равно придется изобретать ее заново.
С помощью Rpath можно проделать несколько хитроумных действий, чтобы исполняемый файл ELF или .so выполнял поиск своих зависимых файлов. so файлы сначала находятся в том же каталоге, что и он сам:
создайте короткий сценарий echo-rpath, состоящий из
echo '-Wl, - rpath = $ ORIGIN'
, добавьте это в свою командную строку сборки как gcc - o file -lwhatever ʻecho-rpath`
objects
(механизм echo не позволяет Make или оболочке съесть знак $ и обеспечивает его передачу в ld.)