C++ GoogleTest > 1.4.0 : undefined reference to « pthread_getspecific » etc…

Si comme moi vous utilisez la librairie C++ Googletest, et que vous compilez vous-même cette librairie, sachez que sous linux (peut-être unix/posix aussi), il faut ajouter la librairie pthread (-lpthread).

J’utilisais la version 1.4.0 qui n’en avait pas besoin, mais depuis un svn update il y a quelques heures, j’ai du ajouter pthread.

Platform: Linux
scons: done reading SConscript files.
scons: Building targets ...
Copy("bin/test/README", "README")
g++ -o bin/test/fpm-test test/main.o src/ratp/fpmanager/fp_helper.o src/external/googletest/src/gtest.o src/external/googletest/src/gtest-death-test.o src/external/googletest/src/gtest-filepath.o src/external/googletest/src/gtest-port.o src/external/googletest/src/gtest-printers.o src/external/googletest/src/gtest-test-part.o src/external/googletest/src/gtest-typed-test.o
src/external/googletest/src/gtest.o: In function `testing::internal::ThreadLocal<testing::TestPartResultReporterInterface*>::GetOrCreateValue() const':
/home/christian/workspace/fpmanager/src/external/googletest/include/gtest/internal/gtest-port.h:1300: undefined reference to `pthread_getspecific'
...

Avec Scons on peut ajouter quelquechose dans ce style :

if platform == 'linux':
	env.Append(LIBS = 'pthread')

Ça évite de chercher presqu’une heure, une anomalie dans son programme de test !!!

;-)

Compiler Android sous Ubuntu Lucid Lynx (10.04) , pas de java5 packagé

Logo Android

Logo Android

Pour ceux qui veulent se lancer dans la compilation d’Android sous Ubuntu Lucid Lynx, il faut savoir que cela nécessite de réaliser quelques manipulations supplémentaires.

Tous d’abord le lien du projet pour compiler les sources d’Android (très bien écrit) :

Mais pour notre Ubuntu le problème est java5, qui n’est plus dispo dans les dépôts. Si vous tenter de compiler les sources avec le java6 sous une Ubuntu 32bits, vous tomberez sur un bug indiquant que des entêtes de fichiers C 64bits non trouvés. Dans tous les cas, des parties du code java d’Android ne sont pas supportés par java 6.

Donc la première des choses à faire est de récupérer java5 depuis le site d’Oracle :

Installer manuellement le java5

chmod a+x jdk-1_5_0_22-linux-i586.bin
./jdk-1_5_0_22-linux-i586.bin
sudo mv jdk1.5.0_22 /usr/lib/jvm/java-5-sun-1.5.0.22
cd /usr/lib/jvm
sudo ln -s java-5-sun-1.5.0.22 java-5-sun

Je n’ai pas trouvé le moyen d’inclure mon install de java5 avec l’outil « update-java-alternatives » qui permet de switcher d’une jvm à l’autre en toute simplicité. Il est toujours possible de créer un fichier « .java-5-sun.jinfo » mais je manque de temps et il existe peut-être un outil pour le faire, n’hésitez pas à me faire signe. (trouvé : http://doc.ubuntu-fr.org/java)

Avant de lancer le make -j4 du tutoriel de google, faites la manip suivante dans le shell (non persistante) :

export JAVA_HOME=/usr/lib/jvm/java-5-sun
export ANDROID_JAVA_HOME=${JAVA_HOME}
export PATH=${JAVA_HOME}/bin:${PATH}

Tenter votre première compilation d’Android générique :

make -j4

Liens

Première application en GO, un client NetSoul

Cela devient un classique pour moi ; appréhender un langage de programmation se concrétise souvent par l’écriture d’un client NetSoul. L’écriture d’un client NetSoul, nécessite de toucher aux sockets (IO), à la crypto, traitement de chaînes de caractères, gestion des exceptions et erreurs puis parfois aux évènements/notifications/signaux, processus concurrents (Lock/Unlock, Thread) etc… De quoi avoir un avis exhaustif sur le langage de manière assez large.

Globalement le langage GO se rapproche beaucoup des langages de scripting récents, mais le langage est bien dans la famille des langages compilés. La prise en main est assez rapide si l’on maîtrise déjà des langages tels que C/C++, Ruby, Python… Sans connaissance particulière en programmation c’est possible de commencer par le langage GO, mais je fais parti de ceux qui pense que la programmation s’apprend avec le « C« .

Exemple d’un client NetSoul écrit en GO

GOSOUL NetSoul client

GOSOUL NetSoul client, par Christian KAKESA

Programmation GO (golang) [Ubuntu 9.10]

Logo GO

GO lang

GO est un langage de programmation propulsé par Google. L’objectif premier de GO est de proposer un langage rapide à l’exécution et à la compilation, qui soit safe (multi-threading, multi-processus, gestion de la mémoire), facile à programmer et en même temps bas niveau. Est-ce possible ? Allez GO

Préparer son environnement de développement

sudo aptitude install bison gcc libc6-dev ed gawk make
sudo aptitude install python-setuptools python-dev build-essential
sudo easy_install mercurial
mkdir $HOME/bin
mkdir $HOME/go

Ajouter les lignes suivantes dans le fichier « ~/.bashrc »

export GOBIN=${HOME}/bin # Obligatoire si le choix de l'emplacement est différent de ${HOME}/bin (pensez à ajouter ce chemin dans $PATH)
export GOROOT=${HOME}/go
export GOARCH=386 # Ou amd64, arm
export GOOS=linux
export PATH=${GOBIN}:${HOME}/bin:${PATH}

Récupérer et compiler GO

. ~/.bashrc
hg clone -r release https://go.googlecode.com/hg/ $GOROOT
cd $GOROOT/src
LANG=en_US ./all.bash

Écrire le fameux « Bonjour le monde »

cat > bonjour.go <<EOF
package main
import "fmt"
func main() {
	fmt.Printf("Bonjour le monde !!!\n")
}
EOF
8g bonjour.go
8l -o bonjour bonjour.8
./bonjour

Liens :

  1. Tutoriel GO
  2. En savoir plus sur les librairies du langage GO

Signer une application Android [Ubuntu 9.10]

Android developper

Android developers

Signer une application Android n’est pas bien compliqué. Ces quelques vont vous guider dans la préparation du certificat. Il faut bien entendu avoir une plate forme Android fonctionelle.

mkdir -p ~/.local/share/keystore
cd ~/.local/share/keystore
keytool -genkey -v -keystore android-release-key.keystore -alias mon_alias -keyalg RSA -validity 10000

Il ne vous reste plus qu’à répondre aux questions…

Pour signer une application, le plus simple est d’utiliser ant. Il suffit de renseigner les deux lignes ci-dessous dans le fichier build.properties à la racine de votre projet :

# fichier : build.properties
key.store=/home/christian/.local/share/keystore/android-release-key.keystore
key.alias=mon_alias

Lorsque vous compiler votre projet avec la commande ant, il faut renseigner le ou les mots de passe de votre certificat, puis à la racine du projet tapez :

ant release

Il est aussi possible de réaliser la signature de vos applications à la main, je vous conseille dans ce cas le tutoriel android traitant directement du sujet. il ne reste plus qu’à déployer l’application.

Pour installer votre application sur l’émulateur ou votre device, il faut utiliser l’outil ADB ou passer par Eclipse/ADT.