Обычно каждая единица перевода генерирует объектный файл, содержащий определения символов, определенных в этой единицы перевода. Чтобы использовать эти символы, вам необходимо связать эти объектные файлы.
В разделе 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 помещает информацию в поле внизу каждой функции в разделе «Библиотека».
Несмотря на то, что вопрос конкретно описывает установку 2.6, я хотел бы добавить некоторые примечания к отличным ответам выше, если кто-то столкнется с этим. Для записи было мое дело, что я пытался установить 2.7 на ящик ubuntu 10.04.
Во-первых, моя мотивация к методам, описанным во всех ответах здесь, заключается в том, что установка Python из deadsnake's ppa's был полным сбоем. Поэтому создание локального Python - это путь.
Попытавшись, я подумал, что полагаться на стандартную установку pip (с sudo apt-get install pip
) было бы достаточно. К сожалению, это неправильно. Оказалось, что я получаю все шорты от неприятных проблем и, в конечном итоге, не могу создать виртуальный.
Поэтому я настоятельно рекомендую установить pip локально с wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py && python get-pip.py --user
. Этот вопрос, связанный с , дал мне этот намек.
Теперь, если это не работает, убедитесь, что libssl-dev
для Ubuntu или openssl-dev
для CentOS. Установите их с помощью apt-get
или yum
, а затем перестройте Python (нет необходимости удалять что-либо, если оно уже установлено, сделать это сверху). get-pip
жалуется на это, вы можете проверить это, запустив import ssl
в оболочке py.
Последнее, не забудьте объявить .local/bin
и локальный питон для пути, проверьте с помощью which pip
и which python
.
Теперь, через несколько дней, самый простой способ найти более обновленную версию Python - установить его через conda в среду conda.
Установить conda (вам может понадобиться virtualenv для this)
pip install conda
Я добавляю этот ответ здесь, потому что загрузка вручную не требуется. conda
сделает это для вас.
Теперь создайте среду для требуемой версии Python. В этом примере я буду использовать 3.5.2
, потому что это последняя версия в это время написания (август 2016).
conda create -n py35 python=3.5.2
Создает среду для конды для установки пакетов
< hr>Чтобы активировать эту среду (я предполагаю, что linux в противном случае проверяет conda docs ):
source activate py35
Теперь установите то, что вам нужно либо через pip или conda в среде (conda имеет лучшую поддержку двоичного пакета).
conda install <package_name>
Прежде всего, спасибо DTing за отличный ответ.
Для тех, кто страдает отсутствием доступа GCC на совместном хостинге, перейдите на ActivePython вместо обычного питона, как упомянул Скотт Стаффорд. Вот команды для этого.
wget http://downloads.activestate.com/ActivePython/releases/2.7.13.2713/ActivePython-2.7.13.2713-linux-x86_64-glibc-2.3.6-401785.tar.gz
tar -zxvf ActivePython-2.7.13.2713-linux-x86_64-glibc-2.3.6-401785.tar.gz
cd ActivePython-2.7.13.2713-linux-x86_64-glibc-2.3.6-401785
./install.sh
Он спросит вас о пути к каталогу python. Введите
../../.localpython
Просто замените выше в качестве шага 1 в ответе DTing и следуйте шагу 2 после этого. Обратите внимание, что URL-адрес пакета ActivePython может измениться с новой версией. Вы всегда можете получить новый URL-адрес здесь: http://www.activestate.com/activepython/downloads
На основании URL-адреса вам нужно изменить имя команды tar и cd основанный на полученном файле.
Вы можете использовать pyenv.
Существует множество разных версий anaconda, jython, pypy и т. д. ...
https://github.com / yyuu / pyenv
Установка настолько же проста, как pyenv install 3.2.6
pyenv install --list
Available versions:
2.1.3
2.2.3
2.3.7
2.4
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.5
2.5.1
2.5.2
2.5.3
2.5.4
2.5.5
2.5.6
2.6.6
...
Я использую virtualenvwrapper и не хочу изменять $ PATH, вот как:
$ which python3
/usr/local/bin/python3
$ mkvirtualenv --python=/usr/local/bin/python3 env_name
Я не нашел подходящего ответа, поэтому здесь идет мой прием, который основывается на ответе @toszter, но не использует системный Python (и вы можете знать, что не всегда рекомендуется устанавливать setuptools и virtualenv на системном уровне, когда имея дело со многими конфигурациями Python):
#!/bin/sh
mkdir python_ve
cd python_ve
MYROOT=`pwd`
mkdir env pyenv dep
cd ${MYROOT}/dep
wget https://pypi.python.org/packages/source/s/setuptools/setuptools-15.2.tar.gz#md5=a9028a9794fc7ae02320d32e2d7e12ee
wget https://raw.github.com/pypa/virtualenv/master/virtualenv.py
wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tar.xz
xz -d Python-2.7.9.tar.xz
cd ${MYROOT}/pyenv
tar xf ../dep/Python-2.7.9.tar
cd Python-2.7.9
./configure --prefix=${MYROOT}/pyenv && make -j 4 && make install
cd ${MYROOT}/pyenv
tar xzf ../dep/setuptools-15.2.tar.gz
cd ${MYROOT}
pyenv/bin/python dep/virtualenv.py --no-setuptools --python=${MYROOT}/pyenv/bin/python --verbose env
env/bin/python pyenv/setuptools-15.2/setup.py install
env/bin/easy_install pip
echo "virtualenv in ${MYROOT}/env"
Трюк с проблемой взлома курицы-яйца заключается в том, чтобы сначала сделать virtualenv без setuptools, потому что он иначе не работает (пип не может быть найден). Может быть возможно установить pip / wheel напрямую, но как-то easy_install было первым, что мне пришло в голову. Кроме того, сценарий может быть улучшен путем разложения конкретных версий.
NB. Использование xz в скрипте.
Нет, но вы можете установить изолированную сборку Python (например, ActivePython ) в вашем каталоге $HOME
.
Этот подход является самым быстрым и не требует вы сами компилируете Python.
(в качестве бонуса вы также можете использовать менеджер бинарных пакетов ActiveState
Предварительные требования:
sudo easy_install virtualenv
sudo pip install virtualenvwrapper
Установка virtualenv с Python2.6:
/usr/local
или в другое место. /usr/local
, добавьте его в свой PATH. python2.5
и python2.6
python2.6
: mkvirtualenv --python=python2.6 yournewenv
Эта процедура устанавливает Python2.7 в любом месте и исключает любые абсолютные ссылки на пути в вашей папке env
(управляется virtualenv) . Даже virtualenv не установлен абсолютно.
Таким образом, теоретически вы можете отбросить каталог верхнего уровня в архив, распространить и запустить все, что настроено в tarball на машине, на которой нет Python (или любых зависимостей) .
Свяжитесь со мной по любым вопросам. Это всего лишь часть текущего, более масштабного проекта, который я разрабатываю. Теперь для капли ...
$ mkdir env
$ mkdir pyenv
$ mkdir dep
$ cd dep
$ wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
$ wget https://raw.github.com/pypa/virtualenv/master/virtualenv.py
pyenv
. make clean
является необязательным, если вы делаете это 2-е, 3-е, N-е время ... $ tar -xzvf Python-2.7.3.tgz
$ cd Python-2.7.3
$ make clean
$ ./configure --prefix=/path/to/pyenv
$ make && make install
$ cd ../../
$ ls
dep env pyenv
$ dep/virtualenv.py --python=/path/to/pyenv/bin/python --verbose env
env/include/
$ ls -l env/include/
$ cd !$
$ rm python2.7
$ ln -s ../../pyenv/include/python2.7 python2.7
$ cd ../../
$ ls -l env/lib/python2.7/
$ cd !$
$ ln -sf ../../../pyenv/lib/python2.7/UserDict.py UserDict.py
[...repeat until all symbolic links are relative...]
$ cd ../../../
$ python --version
Python 2.7.1
$ source env/bin/activate
(env)
$ python --version
Python 2.7.3
Aloha.
Обычный подход заключается в том, чтобы загрузить исходный код и построить и установить локально (но не напрямую в virtualenv), а затем создать новый virtualenv, используя эту локальную установку Python. В некоторых системах может быть возможно загрузить и установить предварительно построенный питон, а не строить из источника.