RSS

月別アーカイブ: 6月 2016

x86 g++ のソースを x64 g++ でコンパイル

x86 版 Ubuntu でビルドできた Shared Object (so ファイル) を生成する C++ ソース を x64 版でコンパイルしなおしたらエラーが出ました。エラーの内容は大きく分けて次の2点。

error: ‘sleep’ was not declared in this scope
関数はsleepだけではなく、他にもたくさんありました。これは、unistd.h がソースに含まれていないと出るようです。unistd.h を単純に追加したら解決。

/tmp/cc9bT00P.o: error adding symbols: Bad value
これはコンパイルスイッチに -fPIC を追加する必要があるようです。次のような親切なメッセージが表示されました。(笑)

/usr/bin/ld: /tmp/cc9bT00P.o: relocation R_X86_64_32S against `.data’ can not be used when making a shared object; recompile with -fPIC

 
コメントする

投稿者: : 2016/06/30 投稿先 C, 未分類

 

Google Drive API v2 から v3 への移行でつまづいたいくつかの点

Google Drive API .NET を使って v2 から v3 へアプリケーションを移行するのにつまづいた点をまとめました。

1 フィールド(プロパティ)の名前が変わった

File オブジェクトのフィールド(プロパティ)が変わっています。一番影響を受けるのが、ファイルの名前で v2 では Title プロパティで取得していたのが v3 からは Name プロパティになります。ファイルの日時も …Date から …Time に変わりました。他にもあるかしれませんが、よく使いそうなところとしてはこんなところでしょうか。

2 ファイル情報(フィールド)の取得方法

v2 ではファイル情報は全部返してきたかと思いますが、v3 では取得するものを指定しないと Nothing (C# では null) が返されます。取得項目は GetRequest の Fields プロパティにカンマ区切りテキストで指定します。このフィールド名は大文字小文字が正確でないとエラーになります。

Public Function GetFile(ByVal id As String) As Data.File
  Dim request As FilesResource.GetRequest = service.Files.Get(id)
  request.Fields = "name,id,parents,size,description,modifiedTime,mimeType"
  Dim File As Data.File = request.Execute()
  Return file
End Function

3 ファイルの場所がトップレベル(Root)かの判別

v2 では Parents コレクションの要素 (ParentRefernce 型) に IsRoot プロパティというのがあって簡単に判別できたのですが、v3 ではParents コレクションの要素は String 型(フォルダのId)に変わっています。
この Id を使って File オブジェクトを取得するとファイルの場所がトップレベル(Root)でも有効な Id が取得されます。この Id から名前 (Name プロパティ) を取得すると “マイドライブ” (日本語版の場合)となります。
したがって、ファイルの場所がトップレベルかどうかは、親のフォルダの Id を使って親の名前を取得し、それが”マイドライブ”であるかを確認するしかないようです。(どこかに IsRoot みたいのがあるかもしれませんが)

とりあえず、つまづいたところは現在のところ以上です。

 
コメントする

投稿者: : 2016/06/16 投稿先 Google, VB