Обычно каждая единица перевода генерирует объектный файл, содержащий определения символов, определенных в этой единицы перевода. Чтобы использовать эти символы, вам необходимо связать эти объектные файлы.
В разделе gcc вы должны указать все объектные файлы, которые должны быть связаны вместе в командной строке, или скомпилировать файлы реализации вместе.
g++ -o test objectFile1.o objectFile2.o -lLibraryName
Здесь libraryName
- это просто имя библиотеки, без добавления к платформе. Так, например, в файлах библиотеки Linux обычно называют libfoo.so
, но вы должны писать только -lfoo
. В Windows этот же файл можно назвать foo.lib
, но вы будете использовать тот же аргумент. Возможно, вам придется добавить каталог, в котором эти файлы можно найти, используя -L‹directory›
. Обязательно не записывайте пробел после -l
или -L
.
Для XCode: добавьте пути поиска заголовка пользователя -> добавьте путь поиска библиотеки -> перетащите фактическую ссылку библиотеки в
В MSVS файлы, добавленные в проект, автоматически связывают их объектные файлы, и будет создан файл lib
(в общем использовании). Чтобы использовать символы в отдельном проекте, вам нужно будет добавить файлы lib
в параметры проекта. Это делается в разделе Linker свойств проекта в Input -> Additional Dependencies
. (путь к файлу lib
должен быть добавлен в Linker -> General -> Additional Library Directories
). При использовании сторонней библиотеки, которая предоставляется с файлом lib
, отказ в этом обычно приводит к ошибке.
Также может случиться так, что вы забудете добавить файл в компиляцию, и в этом случае объектный файл не будет сгенерирован. В gcc вы должны добавить файлы в командную строку. В MSVS добавление файла в проект заставит его скомпилировать его автоматически (хотя файлы могут, вручную, быть отдельно исключены из сборки).
В программировании Windows контрольный знак, который вы не связывали необходимая библиотека состоит в том, что имя неразрешенного символа начинается с __imp_
. Посмотрите имя функции в документации, и она должна сказать, какую библиотеку вам нужно использовать. Например, MSDN помещает информацию в поле внизу каждой функции в разделе «Библиотека».
Ansible использует директивы become
, become_user
и become_method
для достижения эскалации привилегий. Вы можете применить их к целой пьесе или книжке, установить их в включенную playbook или установить для нее определенную задачу.
- name: checkout repo
git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
become: yes
become_user: some_user
Вы можете использовать become_with
, чтобы указать, как достигается эскалация привилегий , по умолчанию sudo
.
Директива действует для области действия блока, в котором она используется ( examples ).
См. Хосты и пользователи для некоторых дополнительных примеров и Станьте (Privilege Escalation) для более подробной документации.
В дополнение к областям действия become
и become_user
, Ansible 1.9 добавил некоторые новые переменные и параметры командной строки, чтобы установить эти значения для продолжительности воспроизведения в отсутствие явных директив:
become
/ become_user
. Начиная с Ansible 2.0.2.0, более старый sudo
/ sudo_user
синтаксис, описанный ниже, все еще работает, но уведомление об устаревании указывает, «Эта функция будет удалена в будущей версии».
- name: checkout repo
git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
sudo: yes
sudo_user: some_user
В Ansible 2.x вы можете использовать block
для группы задач:
- block:
- name: checkout repo
git:
repo: https://github.com/some/repo.git
version: master
dest: "{{ dst }}"
- name: change perms
file:
dest: "{{ dst }}"
state: directory
mode: 0755
owner: some_user
become: yes
become_user: some user
Решение состоит в том, чтобы использовать оператор include
с remote_user
var (описать там: http://docs.ansible.com/playbooks_roles.html ), но это нужно сделать при playbook вместо уровня задачи.
В Ansible> 1.4 вы можете фактически указать удаленного пользователя на уровне задачи, который должен позволить вам войти в систему в качестве этого пользователя и выполнить эту команду, не прибегая к sudo. Если вы не можете войти в систему в качестве этого пользователя, тогда будет также работать решение sudo_user.
---
- hosts: webservers
remote_user: root
tasks:
- name: test connection
ping:
remote_user: yourname
См. http://docs.ansible.com/playbooks_intro.html#hosts-and-users